Возвращение Count из таблицы базы данных, объединенной с другой таблицей - PullRequest
0 голосов
/ 10 мая 2011

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

Заголовки

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 ]

3 голосов
/ 10 мая 2011
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, но вам также необходимо включить это в ваш выбор. Если вы можете игнорировать этот столбец (или использовать его), я бы использовал его вместо t.Name (или рядом с t.Name).

2 голосов
/ 10 мая 2011

Можно также сделать с помощью подвыбора.

Select T.Name,
       (Select Count(*)From Comments C Where C.TitleID=T.ID)As NumComments
  From Titles T

Преимущество в том, что не требуется GROUP BY. Это может быть важно, если таблицы в ваших реальных данных имеют намного больше столбцов, чем в примере выше.

1 голос
/ 10 мая 2011
SELECT title.name, count(comments.comment) as NumComments
FROM titles,comments
WHERE title.id = comment.titleID
Group By title.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...