问。编写一个查询,列出所有不拥有蓝房子的人的姓名。
这是我的代码:
String
这两个表如下所示:
我的结果:
预期结果:
如何避免“ Arian”出现在搜索结果中?
“阿里安”拥有两栋房屋,一栋是红色,一栋是蓝色。由于他拥有红色房子,因此他提出了我的结果。我正在努力找出如何排除他。
答案 0 :(得分:2)
您可以使用not exists
:
SELECT p.name
FROM persons p
WHERE NOT EXISTS (SELECT 1
FROM houses h
WHERE h.owner_id = p.id AND
h.color = 'Blue'
)
答案 1 :(得分:2)
我们还可以使用聚合来解决您的问题:
SELECT p.name
FROM person p
INNER JOIN houses h
ON p.id = h.owner_id
GROUP BY p.name
HAVING SUM(h.color = 'Blue') = 0;
请注意,这种方法的性能类似于戈登的答案。
答案 2 :(得分:0)
您可以使用 anti-join :
SELECT persons.name
FROM persons
LEFT JOIN houses
ON persons.id = houses.owner_id
AND houses.color = 'Blue'
WHERE houses.owner_id IS NULL