SQL: Как выбрать количество записей в одной таблице на основе записей в другой таблице? - PullRequest
2 голосов
/ 20 августа 2011

Допустим, у меня есть две таблицы:

ТАБЛИЦА A

MessageID | Сообщение

1 | Привет
2 | Bonjour

и т.д ..

ТАБЛИЦА B

CommentID | MessageID | Комментарий

1 | 2 | Это комментарий того, кто говорит Bonjour
2 | 2 | Это еще один комментарий к Bonjour

Я пытаюсь выполнить один запрос, который извлекает все записи из таблицы A («сообщения») вместе с количеством комментариев для каждого сообщения из таблицы B.

Результат будет:

Здравствуйте - 0 комментариев
Bonjour - 2 комментария

Я знаю, что это, вероятно, некоторая комбинация использования соединения со счетчиком (*), но я не могу найти правильный синтаксис.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 20 августа 2011

Для подхода, основанного на сообщениях:

SELECT message, count(commentID) 
FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID 
GROUP BY message

Вы хотите, чтобы ЛЕВОЕ СОЕДИНЕНИЕ включало записи в Таблицу A, у которых нет комментариев в Таблице B.

0 голосов
/ 20 августа 2011

Просто дополнение к тому, что уже опубликовано, поскольку, если вы используете это для языка сценариев, вам, вероятно, понадобятся именованные столбцы для всего списка SELECT:

SELECT tableA.messageID, message, count(commentID) AS commentCount
FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID 
GROUP BY message
0 голосов
/ 20 августа 2011

Примерно так:

SELECT MessageID, COUNT(CommentID)
FROM "TABLE B"
GROUP BY MessageID

Если вам нужно Message в дополнение к MessageID, вы сможете сделать что-то вроде этого:

SELECT MessageID, MIN(Message), COUNT(CommentID)
FROM "TABLE A" LEFT JOIN "TABLE B" USING (MessageID)
GROUP BY MessageID

(синтаксис Oracle, возможно, такой же для MSSQL)

0 голосов
/ 20 августа 2011

Попробуйте:

SELECT a.MessageID, COUNT(*)
FROM TABLEA a
JOIN TABlEB b
ON b.MessageID = a.MessageID
GROUP BY a.MessageID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...