我认为这将是一个简单的查询,但它比我预期的更难。
我有一个简单的论坛应用程序,用户可以在其中打开故事,然后其他用户就可以发表评论。
两个表
故事
id
user_id
subject
approved
评论
id
user_id
story_id
approved
基本上,我想通过不计算原始海报自己的评论来查询未答复的故事。即使其他人发布了新评论,但在评论尚未获得批准时也不应将其视为已回答的故事。
select * from stories left join comments on stories.id = comments.story_id
having count(comments.id) = 0 or ( count(comments.id) > 0 and comments.user_id = stories.user_id )
没有“已批准”标志,它可以正常工作,但是当我将'approved'添加到where / having子句中时,我无法使其正常工作。
我做错了什么?
答案 0 :(得分:1)
尝试这个未经测试的查询:
select *
from stories
left join comments on stories.id = comments.story_id and comments.user_id <> stories.user_id
having count(comments.id) = 0
答案 1 :(得分:1)
我会将count
移动到子查询中并放入in
条件来检查已回答的内容和不回答的内容:
SELECT s.*
FROM stories s
WHERE s.id NOT IN (SELECT story_id
FROM comments c
WHERE approved = true AND
c.user_id != s.user_id
GROUP BY story_id
HAVING COUNT(*) > 0)