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

Oracle SQL Join查询问题:实现员工ID关联的姓名映射输出

解决Oracle SQL关联查询的姓名匹配问题

嘿,我来帮你搞定这个查询问题!你之前用OR关联两张表的方式会导致每条tbl_from_to记录和tbl_emp匹配两次(一次匹配col_from,一次匹配col_to),这就是为什么结果里的姓名会重复的原因。

正确的思路是两次关联员工表,分别对应col_from和col_to的编码,给员工表取不同的别名来区分两次关联,这样就能精准拿到对应的姓名了。

正确的SQL语句

SELECT 
    emp_from.name AS res_from,
    emp_to.name AS res_to
FROM tbl_from_to ft
JOIN tbl_emp emp_from ON ft.col_from = emp_from.emp_code
JOIN tbl_emp emp_to ON ft.col_to = emp_to.emp_code;

语句解释

  • 给tbl_emp表分别取别名emp_from和emp_to,代表“来源员工”和“目标员工”
  • 第一次JOIN关联tbl_from_to.col_from和emp_from.emp_code,获取来源员工的姓名
  • 第二次JOIN关联tbl_from_to.col_to和emp_to.emp_code,获取目标员工的姓名

执行这条语句后,你就能得到期望的结果:

res_fromres_to
DB
AB
BC
CD

可选:处理不存在的员工记录

如果tbl_from_to里的col_from或col_to可能没有对应的员工记录(比如编码无效),可以把JOIN换成LEFT JOIN,这样即使没有匹配的员工,也会保留tbl_from_to的记录,对应的姓名会显示为NULL:

SELECT 
    emp_from.name AS res_from,
    emp_to.name AS res_to
FROM tbl_from_to ft
LEFT JOIN tbl_emp emp_from ON ft.col_from = emp_from.emp_code
LEFT JOIN tbl_emp emp_to ON ft.col_to = emp_to.emp_code;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:09:18