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

关联三张表时如何保留未匹配数据并过滤指定字段值?

问题分析与解决方案

你的SQL语句遗漏ID=3的数据,核心原因是左连接的子查询未指定别名,导致关联条件ON A.ID=C.ID实际引用的是原表C而非过滤后的子查询结果,变相把左连接变成了内连接,过滤掉了C表中无匹配的行。

修正后的SQL代码

SELECT DISTINCT A.ID, A.Age, B.Name, filtered_C.Code
FROM A
INNER JOIN B ON A.ID = B.ID
LEFT JOIN (
    SELECT ID, Code
    FROM C 
    WHERE CODE IN ('AA','BB')
) AS filtered_C ON A.ID = filtered_C.ID

逻辑说明

  • INNER JOIN B:确保只有在B表中存在对应Name的ID才会被保留,直接剔除ID=4的数据
  • 左连接过滤后的filtered_C子查询:仅保留C表中Code为AA/BB的数据,同时保证A+B中存在的ID(比如ID=3)即使在过滤后的C中无匹配,也会被保留,Code字段显示为NULL
  • DISTINCT:去除关联过程中产生的重复行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:05