我有一个AMZ_EMPLOYEE_DETAILS
表,其中包含Employee Id
,Employee Name
和Supervisor1
和Supervisor 2
。主管本身就是雇员,但由其姓名代表。
我的任务是用其ID替换主管名称。
我已经使用以下查询来获取解决方案,但是它使用了子查询,并且查询确实进行了优化。为此,我还制作了一个维度表,其中包含所有Id
和Employee Names
表AMZ_EMPLOYEE
SELECT S1.ID, S1.EMP_NAME, S1.SUPER_1_NEW, ZZ.ID AS SUPER_2_NEW
FROM
(SELECT A.ID,A.EMP_NAME,A.SUPER_1,A.SUPER_2,Z.ID AS SUPER_1_NEW
FROM AMZ_EMPLOYEE_DETAILS A
LEFT JOIN
AMZ_EMPLOYEE Z
ON A.SUPER_1 = Z.EMP_NAME ) S1
LEFT JOIN
AMZ_EMPLOYEE ZZ
ON S1.SUPER_2 = ZZ.EMP_NAME
ORDER BY 1
以下是预期的输出。
答案 0 :(得分:2)
使用两个自我LEFT JOIN
的逻辑是正确的。不过,您不需要使用子查询。考虑:
SELECT a.id, a.emp_name, a1.id, a2.id
FROM amz_employee_details a
LEFT JOIN amz_employee a1 ON a1.emp_name = a.super_1
LEFT JOIN amz_employee a2 ON a2.emp_name = a.super_2