SQL不喜欢JOIN

时间:2016-10-06 20:55:51

标签: mysql sql join sql-like

我正在使用MYSQL并且无法使用多个JOINS进行NOT LIKE。 我有3个表,看起来像这样:

父母(表1):

+------------+-------+-----+
|  ParentID  | Name  | AGE |
+------------+-------+-----+
| 1          | Peter | 26  |
| 2          | Karl  | 33  |
| 3          | Tessa | 43  |
+------------+-------+-----+

儿童(表2):

    +------------+-------+-----+
    |  KidID     | Name  | AGE |
    +------------+-------+-----+
    | 1          | Mike  | 3   |
    | 2          | Mike  | 13  |
    | 3          | Jenna | 4   |
    | 4          | Jessi | 14  |
    +------------+-------+-----+

Parents_Kids(表3):

    +-----------+-------+
    | ParentID  | KidID |
    +-----------+-------+
    | 1         | 2     |
    | 1         | 4     |
    | 2         | 1     |
    | 3         | 3     |
    +-----------+-------+

现在我想得到所有没有名叫Mike的孩子的父母姓名或任何形式的Mike。

我试过了:

SELECT p.name
FROM PARENTS p JOIN
     Parents_Kids pk
     ON pk.ParentID = p.ParentID JOIN
     Kids k
     ON k.KidID = pk.KidID
WHERE k.Name NOT LIKE '%mike%';

但是这个查询的结果是错误的。 如果我用LIKE尝试这个查询它可以正常工作,但不能用NOT LIKE。

2 个答案:

答案 0 :(得分:3)

我认为如果他/她的孩子中至少有一个像迈克这样的名字,你就不想选择父母。您可以使用quick_exit来过滤此类案例。

having

答案 1 :(得分:0)

您说您的查询与LIKE一起正常运行,因此获取其他父名称的方法是:

SELECT name
FROM parents
WHERE name not in (SELECT p.name
                   FROM PARENTS p JOIN
                        Parents_Kids pk
                        ON pk.ParentID = p.ParentID JOIN
                        Kids k
                        ON k.KidID = pk.KidID
                   WHERE k.Name LIKE '%mike%')