【发布时间】:2016-03-01 03:36:15
【问题描述】:
我一直觉得我需要提高我的 SQL 知识,我正在努力,但仍然没有成功找到我的问题的答案。
我有 2 张桌子:Post 和 Comments。
Post 表有一个 PK PostID, Username, Title, Content。
Comments 表有一个 PK CommentID, FK PostID, Username, Content。
Username in PostID 是帖子作者的Username,Comments 是评论者的username。其他一切都应该是不言自明的。
主要挑战:我想选择该特定作者发表的所有帖子,并显示每个帖子的 cmets 数量,如果没有找到 cmets,则显示为零。多合一查询(如果可能?)
到目前为止,我最接近的是:
SELECT p.*, COUNT(*) as CommentAmount
FROM Posts p
LEFT OUTER JOIN Comments c
ON p.PostID = c.PostID
WHERE p.Username = 'author1'
GROUP BY c.PostID
它以某种方式工作,但如果该 PostID 不存在 cmets,则既不显示 Post 数据,也不显示 CommentAmount (0) - 这是有道理的,因为它找不到任何具有相同 c.PostID 的 p.PostID .如何让它也显示 0 CommentAmount?有可能吗?
这是我设置的示例 SQL Fiddle,因此您也可以进行测试!:http://sqlfiddle.com/#!9/f8941
更新:我在架构中犯了一个小错误......对不起,伙计们。在上面的小提琴中修复了^
UPDATE2:感谢大家的精彩回答!有趣的是,大多数解决方案如何在 SQL Fiddle 上完美运行,但似乎不适用于我在云上的数据库,使用 MySQL Workbench...我现在必须研究一下,谢谢大家!
【问题讨论】:
-
这是一个非常好的问题。我希望在 SO 上有更多这样的东西。准备小提琴工作,这是一个梦想。做得好 ! :)
标签: mysql sql database select join