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

MySQL三表联合查询需求:按指定条件返回目标结果集

MySQL 查询需求与实现方案

现有数据表

表A(Table A)

idnamenumbercategory
1苹果5F
2橙子1F
3球2X
4香蕉10F

表B(Table B)

idnamenumberconfirm
1苹果5yes
1苹果1no
4香蕉2yes
4香蕉1yes

表C(Table C)

idnamenumberconfirm
2橙子2yes
4香蕉2no

查询要求

  • 仅返回表A中category = 'F'的记录的id、name、number字段,其他记录不返回
  • 表B中仅统计confirm = 'yes'的number求和值,无符合条件记录则返回0
  • 表C中仅统计confirm = 'yes'的number求和值,无符合条件记录则返回0

期望结果

idnameABC
1苹果550
2橙子102
4香蕉1030

实现SQL语句

SELECT 
    a.id,
    a.name,
    a.number AS A,
    IFNULL(b.sum_b, 0) AS B,
    IFNULL(c.sum_c, 0) AS C
FROM 
    TableA a
LEFT JOIN (
    SELECT 
        id,
        SUM(CASE WHEN confirm = 'yes' THEN number ELSE 0 END) AS sum_b
    FROM 
        TableB
    GROUP BY 
        id
) b ON a.id = b.id
LEFT JOIN (
    SELECT 
        id,
        SUM(CASE WHEN confirm = 'yes' THEN number ELSE 0 END) AS sum_c
    FROM 
        TableC
    GROUP BY 
        id
) c ON a.id = c.id
WHERE 
    a.category = 'F'
ORDER BY 
    a.id;

思路说明

  • 先对表B、表C按id分组,用CASE语句筛选出confirm='yes'的记录并求和,不符合条件的记为0
  • 通过左连接将表A与两个分组后的统计结果关联,保证表A中符合category='F'的所有记录都能被保留
  • 用IFNULL处理左连接后可能出现的空值,将其替换为0,确保结果统一为数值格式
  • 最后通过WHERE子句过滤出表A中category='F'的记录,并按id排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:25:04