假设我有两张桌子:
表A
MessageID |消息
1 |你好
2 |的Bonjour
等。
表B
CommentID | MessageID |评论
1 | 2 |这是对有人说Bonjour的评论 2 | 2 |这是对Bonjour的另一个评论
我要做的是运行一个查询,从表A中提取所有记录(“消息”)以及表B中每条消息的所有注释的计数。
结果将是:
你好 - 0评论
Bonjour - 2条评论
我知道这可能是使用带有count(*)的连接的一些组合,但我似乎无法找到正确的语法。
有什么想法吗?
答案 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