2013-08-28 54 views
1

我有兩個表postsauthors。作者有很多帖子,所以有一個外鍵posts.author_id。郵政也有一列approved_at這是一個datetime,並且是NULL直到柱被批准Postgres:選擇具有相同外鍵的所有行都爲空的位置

所以,我怎麼能選擇誰擁有沒有批准的職位所有的作家?

我可以選擇誰擁有至少一個批准後像這樣的東西的所有作者:

SELECT * FROM authors 
WHERE id IN 
(
    SELECT a.id FROM authors a 
    JOIN posts p ON a.id = p.author_id 
    AND p.approved_at IS NOT NULL 
) 

但我無法弄清楚如何做相反的事情:我想選擇所有作者其中全部其關聯的帖子有approved_at = NULL。我怎樣才能選擇這個?

回答

2

- 作家誰擁有沒有覈定員額),使用not exists,對我來說,最可讀的方式:

select a.* 
from authors as a 
where 
    not exists 
    (
     select * 
     from posts as p 
     where p.author_id = a.id and p.approved_at is not null 
    ) 
+0

工作的魅力。謝謝! – GMA

0

如果Postgres支持用這個語法,如果你想選擇誰要麼根本沒有職位或所有職位未被批准(或者,如你所說作者嘗試這種方法

SELECT * FROM authors 
WHERE id IN 
(
    SELECT a.id FROM authors a 
    JOIN posts p ON a.id = p.author_id 
    AND p.approved_at is NULL 

    except 

    SELECT a.id FROM authors a 
    JOIN posts p ON a.id = p.author_id 
    AND p.approved_at IS NOT NULL 
) 
相關問題