SQL:如何根据不同表中的记录从一个表中选择多个记录的计数?

时间:2011-08-20 01:26:31

标签: sql sql-server database join count

假设我有两张桌子:

表A

MessageID |消息

1 |你好
2 |的Bonjour

等。

表B

CommentID | MessageID |评论

1 | 2 |这是对有人说Bonjour的评论 2 | 2 |这是对Bonjour的另一个评论

我要做的是运行一个查询,从表A中提取所有记录(“消息”)以及表B中每条消息的所有注释的计数。

结果将是:

你好 - 0评论
Bonjour - 2条评论

我知道这可能是使用带有count(*)的连接的一些组合,但我似乎无法找到正确的语法。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

对于基于消息的方法:

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

您希望LEFT JOIN在表A中包含表B中没有任何注释的记录。

答案 1 :(得分:0)

尝试一下:

SELECT a.MessageID, COUNT(*)
FROM TABLEA a
JOIN TABlEB b
ON b.MessageID = a.MessageID
GROUP BY a.MessageID

答案 2 :(得分:0)

这样的事情:

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

如果除了MessageID之外还需要Message,您应该可以执行以下操作:

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

(Oracle语法,可能与MSSQL相同)

答案 3 :(得分:0)

只是对已经发布的内容的附录,如果您将其用于脚本语言,则可能需要SELECT列表中所有内容的命名列:

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