2009-06-10 69 views
4

我有兩個表,就像這樣:SQL查詢來獲取一個排,和相關的行數

#Articles: 
ID | Title 
1 "Article title" 
2 "2nd article title" 

#Comments: 
ID | ParentID | Comment 
1 1   "This is my comment" 
2 1   "This is my other comment" 

我一直想知道,什麼是最優雅的方式來得到以下結果:

ID | Title |   NumComments 
1 "Article title"  2 
2 "2nd article title" 0 

這是針對SQL Server的。

回答

17

這通常是比子查詢方法快,但一如既往,你必須配置您的系統,以確保:

SELECT a.ID, a.Title, COUNT(c.ID) AS NumComments 
FROM Articles a 
LEFT JOIN Comments c ON c.ParentID = a.ID 
GROUP BY a.ID, a.Title 
+1

+1 ...我的想法也是;你太快了,喬爾。 – Adrien 2009-06-10 21:00:29

+1

dang it you beat it me it to it ... + 1 – CodeLikeBeaker 2009-06-10 21:00:56

+1

那麼,首先用正確的答案獲得積分!謝謝喬爾! – 2009-06-10 21:02:03

1
select title, NumComments = (select count(*) 
from comments where parentID = id) from Articles 
+0

+1,你是混賬快速的回答 – 2009-06-10 21:03:47

1
SELECT 
    A.ID, A.Title, COUNT(C.ID) 
FROM 
    Articles AS A 
LEFT JOIN 
    Comments AS C ON C.ParentID = A.ID 
GROUP BY 
    A.ID, A.Title 
ORDER BY 
    A.ID 
0

我會做這樣的:

select a.ID 'ArticleId', 
     a.Title, 
     count(c.ID) 'NumComments' 
from Articles a 
left join 
     Comments c 
on  a.ID = c.ParentID 
group by a.ID, a.Title 

這可能有助於決定加入還是使用子查詢:

Transact-SQL - sub query or left-join?

0
SELECT 
Articles.ID 
,Articles.TItle 
,(SELECT Count(*) FROM Comments WHERE Comments.ParentId = Artices.ID) AS CommentCount 
FROM Articles 
0

SELECT Articles.Title,COUNT(Comments.ID) 從物品中INNER JOIN評論ON Articles.ID = Comments.ParentID GROUP BY Articles.Title