1

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

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

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;

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

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

(如果它有所作为,这将在 MySQL 中)。

4

1 回答 1

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
于 2013-06-28T15:28:59.247 回答