如何最好地做一个SQL左连接null检查all必须为null?

z5h*_*z5h 1 mysql sql

假设我拥有表人员,他拥有许多书籍,涵盖了许多主题.一本书可能还没有分配任何主题.

查询拥有某些书籍的人员很容易,这些书籍没有具有左连接和空检查的主题.例如:

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;
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以找到有书的人,以及至少有一本有主题的书的人,然后找到差异.但是有直接的方法吗?

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

小智 7

尝试:

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
Run Code Online (Sandbox Code Playgroud)