开发者社区> 问答> 正文

[SQL问题]文章和评论数多表查询问题?:报错

需求说明

2张表:article,comments

文章表:article表结构:
article_id,artcile_title,content,comments

评论表:comments表结构:
comments_id,content,article_id

一篇文章对应多条评论,其中通过article_id进行对应哪些comments的记录属于哪一篇article。

现在想通过一条执行SQL,把所有article的内容和对应评论的个数读取出来,如果article无对应comments的记录说明该文章暂时无人参与评论,那么count为0.
这条SQL得怎么写?同时不至于太大性能开销。因为这里评论都放到一张表里去,可能评论数记录后续有点大。
谢谢!

展开
收起
kun坤 2020-06-06 16:51:28 881 0
1 条回答
写回答
取消 提交回答
  • select a.artcile_title,count(c.comments_id) from article a
    left join comments c on a.article_id = c.article_id
    group by a.artcile_title



    基本上就是这个样子。如果你的数据很大,那么所有的记录都输出消耗起码是两张表各进行一次全表扫描,最多comments有索引走全索引扫描来统计个数。
    ######为了避免多表查询,可以在article表加一个字段,comment_total 评论总数,即对该篇文章有评论,计数加1;删除评论,则计数减一。 ######

    总结一下上面两位同学

    1.关联查询+索引

    2.数据冗余

    ######上redis吧######

    1.article,comments关联查询+索引;

    2.增加个中间模型——comments数据量过大,可以先将其按article_id分组汇总评论个数,然后article与结果关联查询,从而避免大表关联,结构也更加平衡。

    ######

    如果comments表记录很多,可以试着这么写

    select a.article_id,a.artcile_title,a.content,a.comments,c.cn
    from article a left join
    (select count(comments_id) as cn,article_id from comments group by article_id) c
    on c.article_id = a.article_id

    2020-06-06 16:51:32
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载
AnalyticDB基础版:云原生My SQL 敏捷数仓 立即下载