假设我们有
Owners
id
Dogs
id
owner_id
trained (boolean)
我想得到所有没有有任何受过训练的狗的主人,包括那些没有狗的人。
因此,如果一位主人有一只受过训练的狗,而另一只狗没有受过训练,则该主人不应该出现,因为已经有一只受过训练的狗。
我试过这样的:
SELECT * FROM owners o
LEFT JOIN dogs d on d.owner_id = o.id
WHERE
d.trained = false OR d.trained IS NULL.
但此查询返回的记录包括拥有受过训练的狗的主人,只要他们有一只未经训练的狗。
我不想得到:
- 没有一只受过训练的狗的主人
- 没有狗的主人。
最佳答案
not exists
运算符就是这样做的:
SELECT *
FROM owners o
WHERE NOT EXISTS (SELECT *
FORM dogs d
WHERE trained = true AND d.owner_id = o.id)
关于mysql - 带来所有不包含具有给定值的连接的记录的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659736/