从与另一个表连接的数据库表返回Count

时间:2011-05-09 21:55:41

标签: sql join count

我有两张桌子

标题

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

非常感谢任何帮助。

更新

我忘记了我也希望在没有评论的情况下返回标题。我更新了上面的例子。

3 个答案:

答案 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