2

我有两张桌子postsauthors. 一个作者有很多帖子,所以有一个外键posts.author_id。Post 也有一列approved_at是 a datetime,并且是NULL直到帖子被批准

那么如何选择所有没有获批帖子的作者呢?

我可以选择所有拥有至少一篇已获批准帖子的作者,内容如下:

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

4

2 回答 2

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
    )
于 2013-08-28T16:50:19.523 回答
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
)
于 2013-08-28T16:17:41.773 回答