我正在尝试构建 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
时,我得到的响应是空的。
最佳答案
你在重复 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
这是你想要的那种东西吗?
关于sql - Postgres : filter out some results with join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749595/