SQL查询,它带来所有不包含具有给定值的连接的记录

时间:2017-12-05 17:52:09

标签: mysql sql select

假设我们有

Owners
id

Dogs
id
owner_id
trained (boolean)

我希望所有拥有任何受过训练的狗的所有者,包括那些没有狗的人。< / p>

因此,如果一个拥有者有一只受过训练的狗,而一只狗没有受过训练,那么该主人就不应该出现,因为已经有一只受过训练的狗。

我试过这样的事情:

SELECT * FROM owners o 
LEFT JOIN dogs d on d.owner_id = o.id
WHERE
  d.trained = false OR d.trained IS NULL.

但是这个查询会返回记录,包括训练有狗的所有者,只要他们有没有训练过的狗。

我不想只得到:

  • 没有受过训练的狗的业主
  • 没有狗的老板。

2 个答案:

答案 0 :(得分:1)

not exists运算符就是这样做的:

SELECT *
FROM   owners o
WHERE  NOT EXISTS (SELECT *
                   FORM   dogs d
                   WHERE  trained = true AND d.owner_id = o.id)

答案 1 :(得分:0)

SELECT *
FROM   Owners o,Dogs d
WHERE  o.id=d.owner_id
and  d.trained=false;