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

多表联查:如何返回A、B表全量匹配数据及其他表匹配行?

解决SQL关联查询丢失数据的问题

你的问题出在后续的INNER JOIN会过滤掉前面LEFT JOIN得到的行:
当C表没有匹配A的行时,C.PK_Criteria是NULL,此时INNER JOIN D要求D.PK_Criteria必须等于C.PK_Criteria(NULL),而NULL和任何值都不匹配,这一行就会被直接过滤。同理,只要D、E、F任意一张表没有匹配行,INNER JOIN都会导致整行丢失,最终返回空结果。

要实现“保留A、B全量数据,其余表有匹配时补充信息”的目标,需要把所有后续的INNER JOIN替换为LEFT JOIN,同时修正语法错误:

Select A.Title, B.Status, D.Criteria, F.Criteria
FROM A
LEFT JOIN B 
ON B.PK = A.PK
LEFT JOIN C
ON C.PK = A.PK
LEFT JOIN D 
ON D.PK_Criteria = C.PK_Criteria
LEFT JOIN E
ON E.PK = D.PK
LEFT JOIN F
ON F.PK_Criteria = D.PK_Criteria -- 补上缺失的ON关键字,修正关联条件语法

关键调整说明:

  • 替换INNER JOIN为LEFT JOIN:LEFT JOIN会保留左侧表的所有行,右侧表有匹配时填充字段,无匹配时返回NULL,不会过滤掉前面A、B的有效数据。
  • 修正F表的关联语法:原语句中INNER JOIN F后直接写条件,缺少ON关键字,这是语法错误,必须补上才能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:20:11