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%')
我正在使用 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%')