2013-03-14 71 views
1

我有(我认为)与SQL很简单的问题。 我有两个表格: 帖子(id,body,user_id)和Reports(id,user_id,post_id)。左外条件加入

我想显示给定用户的所有帖子,他没有标记为已报告。

我建立的查询是这样的:

Select * FROM posts LEFT OUTER JOIN 
reports ON reports.post_id = posts.id WHERE reports.id IS NULL 

但是,它需要所有的报告,不仅通过我的用户加入。当然,加入Where reports.id IS NULL AND reports.user_id = 123将无法​​正常工作......有没有解决方案,或者我应该做子查询?

BTW:我不认为这可以使任何区别,但我运行的Postgres的9.x

在此先感谢您的帮助!

回答

3

reports.user_id = 123添加到连接条件,而不是where子句。这将user_id = 123加入只有reports行,只有消除这些比赛:

SELECT * 
FROM posts 
LEFT OUTER JOIN reports ON reports.post_id = posts.id 
    AND reports.user_id = 123 
WHERE reports.id IS NULL 

或者,使用WHERE NOT EXISTS

SELECT * 
FROM posts 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM reports 
    WHERE reports.post_id = posts.id 
    AND reports.user_id = 123 
) 
+0

很大,不知道我可以添加条件ON。作品,谢谢! – user1105595 2013-03-14 09:16:22