Sql 带条件的左外联接
我认为SQL有一个非常简单的问题。 我有两张桌子: 发布(id、正文、用户id)和报告(id、用户id、发布id) 我想显示给定用户的所有帖子,但他没有将其标记为已报告 我构建了如下查询:Sql 带条件的左外联接,sql,postgresql,Sql,Postgresql,我认为SQL有一个非常简单的问题。 我有两张桌子: 发布(id、正文、用户id)和报告(id、用户id、发布id) 我想显示给定用户的所有帖子,但他没有将其标记为已报告 我构建了如下查询: Select * FROM posts LEFT OUTER JOIN reports ON reports.post_id = posts.id WHERE reports.id IS NULL 但是,它需要所有报告,而不仅仅是我的用户添加的报告。当然,在reports.id为NULL且reports.
Select * FROM posts LEFT OUTER JOIN
reports ON reports.post_id = posts.id WHERE reports.id IS NULL
但是,它需要所有报告,而不仅仅是我的用户添加的报告。当然,在reports.id为NULL且reports.user_id=123的位置添加将不起作用……是否有任何解决方案,或者我应该执行子查询
顺便说一句:我不认为这会有什么不同,但我正在运行postgres 9.x
提前感谢您的帮助 将reports.user_id=123
添加到连接条件,而不是where子句。这将仅在报告
行中加入user_id=123
并仅消除那些匹配项:
SELECT *
FROM posts
LEFT OUTER JOIN reports ON reports.post_id = posts.id
AND reports.user_id = 123
WHERE reports.id IS NULL
或者,在不存在的地方使用:
SELECT *
FROM posts
WHERE NOT EXISTS
(
SELECT 1
FROM reports
WHERE reports.post_id = posts.id
AND reports.user_id = 123
)
太好了,我不知道我可以在上添加条件。很好,谢谢!