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

多表连接查询结果行混合,如何实现每个关联结果单独成行?

问题分析与解决方案

你的查询之所以出现结果行混乱,核心原因是同时对Table_B和Table_C执行左连接——这种写法会让两个表的匹配记录产生笛卡尔积,导致来自Table_B和Table_C的结果被错误地混合在同一行里。举个例子:如果Table_B有2条匹配Table_A.id=1的记录,Table_C有3条,最终会得到2×3=6条交叉组合的行,而不是你期望的5条(2+3)独立行。

你想要的是把Table_A与Table_B的匹配结果、Table_A与Table_C的匹配结果纵向分开成单独行,这时候JOIN(横向拼接表)确实不是正确的实现方式,应该用UNION ALL来合并两个独立的查询结果:

-- 获取Table_A与Table_B的匹配行,Table_C列设为NULL
SELECT 
  Table_A.id AS a_id, 
  Table_B.id AS b_id, 
  NULL AS c_id
FROM Table_A
LEFT JOIN Table_B ON Table_B.id_a = Table_A.id
WHERE Table_A.id = 1

UNION ALL

-- 获取Table_A与Table_C的匹配行,Table_B列设为NULL
SELECT 
  Table_A.id AS a_id, 
  NULL AS b_id, 
  Table_C.id AS c_id
FROM Table_A
LEFT JOIN Table_C ON Table_C.id_a = Table_A.id
WHERE Table_A.id = 1

补充说明:

  • 如果不需要保留Table_A中没有对应B/C记录的行,可以把LEFT JOIN换成INNER JOIN,这样只会返回有匹配关联的结果行。
  • UNION ALL会保留所有重复行(如果有的话),如果需要去重可以用UNION,但通常UNION ALL性能更好,适合你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:53:13