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

如何用JOIN关联3张SQL表 对其中两张表字段做UNION得到目标结果

问题排查

你现有代码的错误主要有三点:

  • 字段拼写错误:T1表的姓名字段为name,代码中写的t1.naam属于拼写错误,会直接报错
  • 特殊字段未转义:T3表的关联字段为t2-id,SQL中短横线会被识别为减法运算符,必须用反引号(MySQL)或方括号(SQL Server)包裹
  • 关联逻辑错误:末尾的UNION子查询和前面的联表结果生成了笛卡尔积,会输出大量冗余数据,完全不符合需求
正确实现

核心逻辑是先把T2、T3中同一个T2记录对应的function字段拆成两行做合并,再关联T1、T2获取基础信息即可:

SELECT 
    t1.id,
    t1.name,
    t2.lastname,
    merged_func.function
FROM t1
INNER JOIN t2 
    ON t2.t1_id = t1.id
INNER JOIN (
    -- 合并T2和T3的function,统一关联字段为t2_id
    SELECT id AS t2_id, function FROM t2
    UNION ALL
    SELECT `t2-id` AS t2_id, Function AS function FROM t3
) merged_func 
    ON merged_func.t2_id = t2.id
ORDER BY t1.id;

注:如果使用SQL Server,将代码中的反引号 ` 替换为方括号[]即可,比如将`t2-id`改为[t2-id]。如果需要保留没有对应工种的用户,将INNER JOIN改为LEFT JOIN即可。

执行以上代码即可得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:06:01