Sql 带条件的左外联接

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.

我认为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.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
)

太好了,我不知道我可以在上添加条件。很好,谢谢!