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

三表ID关联查询问题:修正Full Outer Join的跨表匹配缺陷

多表ID关联的正确实现方案

问题场景

三张表各含独立ID列,需关联生成包含各表ID及对应匹配项的结果表,要求同一ID在多表中存在时合并为一行,不存在则留空。

原始表数据

表A:

id_A
1
2
4

表B:

id_B
1
2
3

表C:

id_C
1
3
4

期望结果

id_Aid_Bid_C
111
22
44
33

当前实现问题

使用以下全外连接语句时,无法关联仅存在于表B和表C的ID(如ID=3),导致生成两条冗余记录:

SELECT * FROM A
FULL OUTER JOIN B ON id_A = id_B
FULL OUTER JOIN C ON id_A = id_C

错误结果:

id_Aid_Bid_C
111
22
44
3
3

解决方案

方案1:调整全外连接的关联条件

第三次连接时,使用COALESCE函数取表A或表B中的非空ID,与表C的ID匹配,确保仅存在于B、C的ID能合并为一行:

SELECT 
    A.id_A,
    B.id_B,
    C.id_C
FROM A
FULL OUTER JOIN B ON A.id_A = B.id_B
FULL OUTER JOIN C ON COALESCE(A.id_A, B.id_B) = C.id_C;

方案2:先收集所有唯一ID再左连接

先通过UNION获取三张表的所有唯一ID,再以此为基础分别左连接三张表,这种方式逻辑更清晰,也能覆盖所有ID场景:

SELECT 
    A.id_A,
    B.id_B,
    C.id_C
FROM (
    SELECT id_A AS id FROM A
    UNION
    SELECT id_B AS id FROM B
    UNION
    SELECT id_C AS id FROM C
) AS all_ids
LEFT JOIN A ON all_ids.id = A.id_A
LEFT JOIN B ON all_ids.id = B.id_B
LEFT JOIN C ON all_ids.id = C.id_C;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:24:19