我有两张桌子
标题
ID Name
1 'Title 1'
2 'Title 2'
3 'Title 3'
评论
ID TitleID Comment
1 1 'Title 1 Comment #1'
2 1 'Title 1 Commnet #2'
3 2 'Title 2 comment'
我想要一个记录集,它返回Titles
中的所有标题以及该标题的评论数量,因此
Name # Comments
Title 1 2
Title 2 1
Title 3 0
我研究了如何返回所有标题和每条评论,但我很难通过评论计数返回数据。 (我的查询如下)
SELECT T.ID, T.Name, C.Comment
FROM Titles T
LEFT OUTER JOIN Comments C ON T.ID = C.TitleID
UNION
SELECT T.TitleID, T.Name, C.Comment
FROM Titles T
RIGHT OUTER JOIN Comments C ON T.ID = C.TitleID
非常感谢任何帮助。
更新
我忘记了我也希望在没有评论的情况下返回标题。我更新了上面的例子。
答案 0 :(得分:3)
SELECT t.Name as Title, COUNT(c.ID) as NumberOfComments
FROM Titles t
LEFT JOIN Comments c ON c.TitleID = t.ID
GROUP BY t.Name
理想情况下,您希望按TitleID分组,但您也必须在选择中包含该ID。如果您能够忽略该列(或使用它),那么我会使用它而不是t.Name
(或与t.Name一起使用)。
答案 1 :(得分:2)
也可以使用子选择。
Select T.Name,
(Select Count(*)From Comments C Where C.TitleID=T.ID)As NumComments
From Titles T
优点是不需要GROUP BY。如果真实数据中的表格比上面的示例有更多列,这可能很重要。
答案 2 :(得分:1)
SELECT title.name, count(comments.comment) as NumComments
FROM titles,comments
WHERE title.id = comment.titleID
Group By title.name