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

如何在SQL中实现单个列与多个列的多次关联?

解决多字段关联与行展开的SQL问题

先明确下你的数据源和需求:

现有数据表

t1表(关联关系表)

parentmainchild
ABNULL
BCNULL
NULLCD

t2表(字母对应数值表)

letternum
A1
A2
B7
C12
D14

期望输出

parentparent_nummainmain_numchildchild_num
A1B7NULLNULL
A2B7NULLNULL
B7C12NULLNULL
NULLNULLC12D14

解决方案

其实你不需要用到UNION ALL,核心思路是对t2表进行多次左连接,每次连接对应t1里的一个字段,给每次连接的t2起不同别名区分即可。直接看代码:

SELECT 
    t1.parent,
    t2_parent.num AS parent_num,
    t1.main,
    t2_main.num AS main_num,
    t1.child,
    t2_child.num AS child_num
FROM t1
LEFT JOIN t2 AS t2_parent ON t1.parent = t2_parent.letter
LEFT JOIN t2 AS t2_main ON t1.main = t2_main.letter
LEFT JOIN t2 AS t2_child ON t1.child = t2_child.letter

思路解释

  1. 多别名左连接:把t2表分别以t2_parent、t2_main、t2_child的别名连接到t1上,分别对应parent、main、child三个字段与t2.letter的关联,这样就能一次性拿到每个字母对应的数值。
  2. 自动行展开:当t2里同一个字母有多个数值时(比如A对应1和2),左连接会自动把t1中对应的行(第一行A-B-NULL)展开成两行,正好匹配你要的输出。
  3. NULL值处理:用LEFT JOIN而不是INNER JOIN,保证当t1里的字段为NULL时(比如第四行的parent),对应的_num字段也会显示NULL,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:13:12