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

标签 mysql sql select

假设我们有

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/

相关文章:

MySQL只计算新记录

JQuery append 到使用数组进行选择

sql - 执行从数据库表返回的存储过程

mysql - 在 MySQL 中选择两个表

mysql - 如何循环遍历 DatagridView 中的行和列以将其值插入 mysql 表中

MySQL : selecting the X smallest values

mysql - 无法加载Mysql LOAD DATA LOCAL INFILE

PHP 变量不会在后续查询中被覆盖

php - mysql , PDO 和 php 多选搜索

sql - 如何通过运算符(operator)从 Hive 组中获取元素数组/包?