如评论中所述,这里有几个问题。
首先,由于您要联接三个表,因此您得到的答案是正确的。1 x 2 x 3行= 6。
其次,您对评论的汇总实际上并没有汇总任何内容。正如您在结果中看到的那样,计数始终为1,而我希望您认为两个评论为2。由于您要对ID进行分组,因此将对每个唯一ID(始终为1)执行计数。我想您可能想对messageid进行分组
SELECT count(*), messageid
FROM comments
GROUP BY messageid
同样,正如评论中所讨论的那样,您通常不会以这种方式获取信息。您通常只需进行三个查询,因为其中两个关系是一对多的。如果类别很短(并且您正在使用sql Server),则可以将类别压缩到自己的列中(即“测试,安装,问题”)。这是您将如何做的。
select id, title, message,
(select CAST(category + ', ' as nvarchar(max))
from @Categories c where messageid = m.id
for xml path('')) as Categories
from @Messages m
where m.id = 3
实际上,有几种方法可以做到这一点,但这既快速又肮脏。这样一来,您只需要对查询再进行一次查询即可。您可以加入上一个查询,并像这样在两行中获取所有信息
select m.id, title, m.message,
(select CAST(category + ', ' as nvarchar(max))
from @Categories c where messageid = m.id
for xml path('')) as Categories,
cm.message
from @Messages m
left outer join @Comments cm on m.id = cm.messageid
where m.id = 3
但同样,您可能只想再进行一次查询以避免重复信息。
最后,我想展示一下您可能希望如何进行评论计数。
select m.id, title, m.message,
(select CAST(category + ', ' as nvarchar(max))
from @Categories c where messageid = m.id
for xml path('')) as Categories,
CommentCount,
cm.message
from @Messages m
left outer join
(
select messageid, COUNT(*) CommentCount
from @Comments
group by messageid
) rsCommentCount on rsCommentCount.messageid = m.id