SQL-запрос для получения строки и количества связанных строк - PullRequest
4 голосов
/ 11 июня 2009

У меня есть две таблицы, например:

#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.

Ответы [ 6 ]

17 голосов
/ 11 июня 2009

Обычно это будет быстрее, чем подход подзапроса, но, как всегда, вы должны профилировать свою систему, чтобы быть уверенным:

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 голос
/ 11 июня 2009
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
1 голос
/ 11 июня 2009
select title, NumComments = (select count(*) 
from comments where parentID = id) from Articles
0 голосов
/ 11 июня 2009

ВЫБРАТЬ Статьи. Название, COUNT (Comments.ID) ИЗ СТРУКТУР ВНУТРЕННЕЕ СОЕДИНЕНИЕ Комментарии НА Articles.ID = Comments.ParentID GROUP BY Articles.Title

0 голосов
/ 11 июня 2009
SELECT
Articles.ID
,Articles.TItle
,(SELECT Count(*) FROM Comments WHERE Comments.ParentId = Artices.ID) AS CommentCount
FROM Articles
0 голосов
/ 11 июня 2009

Я бы сделал это так:

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 - подзапрос или левое соединение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...