mysql - 如何最好地执行 SQL left join null 检查所有必须为 null 的地方?

标签 mysql sql

假设我有一个表 Person,他拥有许多 Books,涵盖许多 Subjects。 一本书可能还没有分配任何主题。

使用左连接和空检查很容易查询拥有一些没有主题的书籍的人。例如:

select * from persons p 
  inner join person_book pb on pb.person_id = p.id
  left  join book_subject bs on bs.book_id = person_book.book_id
  where book_subject.book_id is null;

查询只拥有没有既定主题的书籍的人的最佳方法是什么?

我知道我可以找到有书的人,以及至少有 1 本主题书的人,然后找出不同之处。但是有直接的方法吗?

(如果它有所不同,这将在 MySQL 中)。

最佳答案

尝试:

select p.* 
from persons p 
inner join person_book pb on pb.person_id = p.id
left  join book_subject bs on bs.book_id = person_book.book_id
group by p.id
having count(bs.book_id) = 0

关于mysql - 如何最好地执行 SQL left join null 检查所有必须为 null 的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368279/

相关文章:

mysql - symfony 1.4,$this->save() 和 mysql 插入触发器

mysql - 在 MySQL 服务启动时运行 SQL 查询

mysql - 带有 mysql 的 Visual Basic 组合框

php - 如何在 PHP 中删除变量的双引号以进行 SQL 查询

c# - 从 C# 应用程序中删除远程服务器上的 MySql 数据库表

mysql - 预处理后使用logstash将数据从MySQL导入到elasticsearch

mysql - 错误 1064 在触发器中声明变量

mysql - 将 MySQL 结果限制为一周的前几天

MySQL - 从临时表插入

mysql - 错误 : column is invalid because it is not contained in either an aggregate function or the GROUP BY