您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在一个查询中从三个表中获取数据

在一个查询中从三个表中获取数据

评论中所述,这里有几个问题。

首先,由于您要联接三个表,因此您得到的答案是正确的。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
其他 2022/1/1 18:42:09 有357人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶