如何用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
相关产品推荐
相关产品推荐

