SQL如何两次关联同一张键表匹配不同字段获取对应编码值
多次关联同一映射表的正确SQL实现
错误原因
你出现匹配混乱的核心问题是两次关联Table_keys码表时没有为表设置不同的别名,导致数据库无法区分两次关联的匹配逻辑,触发了字段匹配冲突。
正确实现逻辑
要实现两次独立匹配,只需给两次关联的Table_keys设置不同的别名,分别绑定不同的匹配条件即可:
- 先关联
Table1和Table2,关联条件为id和name一致(可根据实际业务需求选择INNER JOIN或LEFT JOIN) - 第一次关联
Table_keys取别名tk1,用Table1的model字段匹配tk1的model字段,得到model number_1 - 第二次关联
Table_keys取别名tk2,用Table2的model2字段匹配tk2的model字段,得到model number_2
示例SQL代码
SELECT t1.id, t1.name, t1.model, t2.model2, tk1.`model number` AS `model number_1`, tk2.`model number` AS `model number_2` FROM Table1 t1 -- 关联Table2,可根据实际场景替换为LEFT JOIN INNER JOIN Table2 t2 ON t1.id = t2.id AND t1.name = t2.name -- 第一次关联码表匹配Table1的model LEFT JOIN Table_keys tk1 ON t1.model = tk1.model -- 第二次关联码表匹配Table2的model2 LEFT JOIN Table_keys tk2 ON t2.model2 = tk2.model
注:若使用Oracle等不支持反引号的数据库,可将反引号包裹的带空格字段名替换为双引号。
预期输出结果
按照你给出的测试数据,最终Table_result的内容如下:
- id=1,name=1,model=st,model2=st,model number_1=234,model number_2=234
- id=2,name=2,model=ar,model2=th,model number_1=127,model number_2=338
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

