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_fromcol_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_fromemp_to,代表“来源员工”和“目标员工”
  • 第一次JOIN关联tbl_from_to.col_fromemp_from.emp_code,获取来源员工的姓名
  • 第二次JOIN关联tbl_from_to.col_toemp_to.emp_code,获取目标员工的姓名

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

res_fromres_to
DB
AB
BC
CD

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

如果tbl_from_to里的col_fromcol_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

火山引擎 最新活动