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

SQL行内多个同表外键值映射查询出现重复结果如何解决

多外键关联同一张表的多行映射实现

问题原因

你写的SQL有两个明显问题:

  • 多次关联Table2时没有给表设置独立别名,本身就不符合SQL语法规范,直接执行会发表名重复错误
  • 逻辑方向错了:你当前写法是想把三个外键对应的品牌值作为三列返回,但你的需求是把三个外键对应的品牌拆成独立行,多表JOIN会生成笛卡尔积,自然会出现大量重复数据。

正确写法

核心思路是先把Table1中三个存储品牌ID的列,通过UNION ALL拆成多行的单品牌ID字段,再统一关联Table2取对应的品牌编码,写法兼容所有主流关系型数据库:

SELECT 
    base.ID,
    base.EXTERNALCODE,
    t2.Brand_Code
FROM (
    SELECT ID, EXTERNALCODE, Brand_T AS brand_id FROM Table1
    UNION ALL
    SELECT ID, EXTERNALCODE, Brand_E AS brand_id FROM Table1
    UNION ALL
    SELECT ID, EXTERNALCODE, Brand_C AS brand_id FROM Table1
) base
LEFT JOIN Table2 t2 ON base.brand_id = t2.ID
ORDER BY base.ID, t2.ID;

如果你使用的数据库支持UNPIVOT语法(SQL Server、Oracle、PostgreSQL 12+等),可以用更简洁的写法,效果和上面完全一致:

SELECT 
    t1.ID,
    t1.EXTERNALCODE,
    t2.Brand_Code
FROM Table1
UNPIVOT (
    brand_id FOR brand_col IN (Brand_T, Brand_E, Brand_C)
) t1
LEFT JOIN Table2 t2 ON t1.brand_id = t2.ID
ORDER BY t1.ID, t2.ID;

执行结果

运行上述语句后会返回完全符合预期的结果:

ID EXTERNALCODE  Brand_Code
1  569859        eee
1  569859        465656
1  569859        456U99
2  545479        4OREFUOREFJ9
2  545479        465656
2  545479        r56

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:36:55