如何编写一个查询,给出每个不拥有蓝房子的人的名字?

时间:2019-06-23 14:59:12

标签: mysql sql

问。编写一个查询,列出所有不拥有蓝房子的人的姓名。

这是我的代码:

String

这两个表如下所示:

enter image description here

我的结果:

enter image description here

预期结果:

enter image description here

如何避免“ Arian”出现在搜索结果中?

“阿里安”拥有两栋房屋,一栋是红色,一栋是蓝色。由于他拥有红色房子,因此他提出了我的结果。我正在努力找出如何排除他。

3 个答案:

答案 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