1

我正在尝试构建 SQL 查询(我正在运行 postgres),它会过滤掉一些帖子:

可以说,我有用户模型(id、名称等...)、黑名单模型(带有 id、user_id、blacklisted_user_id)和帖子模型(id、author_id、标题等)。

假设用户 A(id=5) 阻止了用户 B(id=10)。

用户 A 和 B 都不应看到他们的帖子。我正在尝试看起来某事的查询。像这样:

SELECT posts.* FROM "posts" 
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR 
                           b.blacklisted_user_id = posts.author_id)
WHERE (b.user_id = 5 AND b.blacklisted_user_id = posts.author_id) OR
      (b.user_id = posts.author_id AND b.blacklisted_user_id = 5)

但是,结果与我需要的完全相反:我只收到来自黑名单用户的帖子。

当我使用b.user_id != 5时,我得到空的响应。

4

1 回答 1

1

您正在重复 blacklisted_user_id=posts.author_id 这是不必要的。

然后,您可能想要与黑名单不匹配的帖子。就像是:

SELECT posts.* FROM posts 
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR 
                           b.blacklisted_user_id = posts.author_id)
WHERE posts.author_id = 5 AND b.user_id IS NULL

那是你想要的那种东西吗?

于 2013-02-07T12:05:41.443 回答