2013-06-28 19 views
1

假设我有桌人,他拥有许多书籍,其中涵盖了许多主题。 一本书可能还没有分配给他们的任何主题。如何最好地做一个SQL左连接null检查所有都必须为空?

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

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中,如果它有所作为)。

回答

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 
+0

'P *'不会与集料工作。 – Allan

+0

@Allan:它会在MySQL中。作为一个例子,请参阅:http://sqlfiddle.com/#!2/f95bc/1 –

+0

我站在更正。 – Allan

相关问题