SQL 不喜欢加入

SQL NOT LIKE with JOIN

我正在使用 MYSQL 并且无法获得 NOT LIKE 与多个 JOINS 一起使用。 我有 3 个表,如下所示:

Parents(表 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     |
    +-----------+-------+

现在我想获取所有 parent 个没有孩子 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。

如果 his/her 至少有一个孩子的名字像迈克,我认为您不想 select parent。您可以使用 having 来过滤此类情况。

SELECT p.name 
FROM PARENTS p 
JOIN Parents_Kids pk ON pk.ParentID=p.ParentID 
JOIN Kids k ON k.KidID=pk.KidID 
group by p.name
having count(case when k.name like '%mike%' then 1 end) = 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%')