如何通过DECODE函数结合另一列解析员工表的主管信息?
用DECODE函数实现员工主管姓氏查询
当然可以用DECODE函数实现你的需求,结合自连接(或子查询)就能完成,以下是两种可行方案:
方案一:自连接+DECODE(推荐,效率更高)
通过自连接员工表,将员工和其主管关联起来,再用DECODE处理无主管的情况:
SELECT e.Surname, DECODE(e.dir, NULL, '无主管', m.Surname) AS director FROM employees e LEFT JOIN employees m ON e.dir = m.emp_no;
LEFT JOIN保证所有员工都会被查询到,包括没有主管的员工- DECODE逻辑:如果员工的
dir字段为空,返回'无主管';否则返回对应主管的姓氏m.Surname
方案二:子查询+DECODE(适合小数据量)
如果坚持用子查询结合DECODE,也可以实现,但数据量大时效率较低:
SELECT Surname, DECODE(dir, NULL, '无主管', (SELECT Surname FROM employees WHERE emp_no = dir)) AS director FROM employees;
两种方案都能得到你期望的查询结果,其中自连接的方式在数据量较大时性能更优。
内容的提问来源于stack exchange,提问作者Gaussjordan
相关产品推荐
相关产品推荐

