2011-08-20 89 views
2

比方说,我有两个表:SQL:如何根据不同表中的记录从一个表中选择多个记录的计数?

表A

邮件ID |消息

1 |你好
2 |卓悦

等。

表B

CommentID | MessageID |评论

1 | 2 |这是对Bonjour说的人的评论
2 | 2 |这是对Bonjour

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

其结果将是:

你好 - 0条评论
卓悦 - 2条评论

我知道这可能是使用了COUNT(*)联接的组合,但我不能似乎没有找到正确的语法。

任何想法?

+0

谢谢大家的帮助。这工作:'SELECT *,计数(commentID)作为评论计数 从tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID GROUP BY消息'但....我怎么会得到** ALL **记录TableA,只是增加了TableB的评论计数?我得到一个MSSQL“Column”tableA。messageID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中“当我尝试从TableA中选择*时出现错误 – PDD

+0

对不起,上面应该是'SELECT message,count(commentID)as评论数目 FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID GROUP BY message'使用*会给我错误 – PDD

回答

1

对于基于消息的方法:

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

你会想要一个LEFT JOIN包括在表A的记录没有任何意见表B.

+0

This works:'SELECT message,count(commentID)as commentcount FROM tableA LEFT JOIN tableB ON tableA。 messageID = tableB.messageID GROUP BY消息'但我怎么会得到**所有**来自tableA的记录和只是从tableB的计数? – PDD

0

这给一试:

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

事情是这样的:

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

如果你需要另外的MessageID消息,你应该能够做这样的事情:

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

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

0

只是一个增编什么已经发布,因为如果你使用脚本语言的话,你可能需要列出SELECT列表中的所有内容:

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