You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL单查询中如何获取同表两条记录数据?附问题场景

问题解决:单查询实现文章+评论(含回复)的JSON Feed

原查询的核心问题

  1. 评论自关联的JOIN条件错误:原语句用cm.id = c.id关联自身,无法获取被回复的原评论,应改为cm.id = c.commentid
  2. 字段引用错误:Comments表没有comment字段,需改为c.text
  3. 跨分支引用表别名:第二个UNION分支中使用了第一个分支的a表别名,导致语法错误
  4. 无效语法:MySQL中表示空值用NULL而非nil
  5. 多余的GROUP BY:itemid是主键,无需分组

修正后的完整SQL

-- 查询所有文章数据
SELECT 
    a.id AS 'itemid',
    a.text AS 'body',
    a.pic AS 'itempic',
    u.name AS 'authorname',
    u.pic AS 'authorpic',
    NULL AS 'subtext'
FROM Articles `a`
LEFT JOIN Users `u` ON a.authorid = u.id

UNION ALL

-- 查询所有评论(含回复评论)
SELECT 
    c.id AS 'itemid',
    c.text AS 'body',
    NULL AS 'itempic',
    u.name AS 'authorname',
    u.pic AS 'authorpic',
    cm.text AS 'subtext'
FROM Comments `c`
-- 关联被回复的原评论,无回复时subtext为NULL
LEFT JOIN Comments `cm` ON cm.id = c.commentid
LEFT JOIN Users `u` ON c.userid = u.id

逻辑说明

  • 文章数据:直接关联Users表获取作者信息,subtext固定为NULL(无回复对象)
  • 评论数据:
    • 直接评论文章的记录:c.commentid为NULL,subtext自动为NULL
    • 回复评论的记录:通过c.commentid关联原评论,获取原评论内容作为subtext
  • 使用UNION ALL替代UNION:文章ID与评论ID分属不同表,不会重复,避免不必要的去重操作,提升查询效率

内容的提问来源于stack exchange,提问作者user6631314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:55:09