我(我认为)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
将无效......是否有任何解决方案,或者我应该进行子查询?
提前感谢您的帮助!
答案 0 :(得分:3)
将reports.user_id = 123
添加到加入条件,而不是where子句。这只会在reports
行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
或者,使用WHERE NOT EXISTS
:
SELECT *
FROM posts
WHERE NOT EXISTS
(
SELECT 1
FROM reports
WHERE reports.post_id = posts.id
AND reports.user_id = 123
)