我有以下工作查询:
SELECT *
FROM EMPLOYEE_HISTORY
WHERE supervisor_login_name IN (select T1.login_name from EMPLOYEE_HISTORY as T1 Join EMPLOYEE_HISTORY as T2 ON T2.supervisor_login_name = T1.supervisor_login_name WHERE T1.supervisor_login_name IN ('a','b','c','d','e')
and T1.is_active_record = 'Y'
and T1.is_employed = 'Y'
Union Select supervisor_login_name from EMPLOYEE_HISTORY As "ops" where supervisor_login_name in ('a','b','c','d','e')) and is_active_record = 'Y'
and is_employed = 'Y'
OR supervisor_login_name IN (select T1.supervisor_login_name from EMPLOYEE_HISTORY as T1 Join EMPLOYEE_HISTORY as T2 ON T2.supervisor_login_name = T1.supervisor_login_name WHERE T1.supervisor_login_name IN ('a','b','c','d','e')
and T1.is_active_record = 'Y'
and T1.is_employed = 'Y'
Union Select supervisor_login_name from EMPLOYEE_HISTORY As "ops" where supervisor_login_name in ('a','b','c','d','e'))
and is_active_record = 'Y'
and is_employed = 'Y'
OR supervisor_login_name IN (select login_name from EMPLOYEE_HISTORY WHERE supervisor_login_name IN(select T1.login_name from EMPLOYEE_HISTORY as T1 Join EMPLOYEE_HISTORY as T2 ON T2.supervisor_login_name = T1.supervisor_login_name WHERE T1.supervisor_login_name in ('a','b','c','d','e')
and T1.is_active_record = 'Y'
and T1.is_employed = 'Y'
Union Select supervisor_login_name from EMPLOYEE_HISTORY As "ops" where supervisor_login_name in ('a','b','c','d','e'))
and is_active_record = 'Y'
and is_employed = 'Y')
and is_active_record = 'Y'
and is_employed = 'Y'
我已经尝试:
+------------+-----------------------+-----+
| login_name | supervisor_login_name | ops |
+------------+-----------------------+-----+
| a | e | y |
| b | f | z |
| c | g | w |
| d | h | x |
| e | y | |
| f | z | |
| g | w | |
| h | x | |
+------------+-----------------------+-----+
如何将我的“操作”列返回到结果? 提示:我正在尝试在“操作”列中退还经理的经理
我正在尝试获取“ ops”列。我有login_name(员工)和supervisor_login_name(员工的经理),我想与经理的经理创建一列“ ops”,因为supervisor_login_name的用户已经在login_name中,所以我想从login_name返回的案例也可以在supervisor__login_name中,并从supervisor_login_name中获取它们的等效项。
这是我拥有和想要的东西的示例:
O(n log n)
所以基本上我想返回当前不存在的“ ops”列。我要创建它
这是表结构:
答案 0 :(得分:1)
根据您的表结构,我假设login_name是employee_name。 另外,根据您的初始查询,我认为我们对在职和受雇的员工都感兴趣(is_employed ='Y'和is_active_record ='Y')
SELECT e.employee_name as login_name
,e.supervisor_login_name
,s.supervisor_login_name as ops
FROM EMPLOYEE_HISTORY e
LEFT JOIN EMPLOYEE_HISTORY s
ON e.supervisor_login_name = s.employee_name
AND s.is_employed = 'Y'
AND s.is_active_record = 'Y'
WHERE e.is_employed = 'Y'
AND e.is_active_record = 'Y'
话虽如此,我认为如果可能的话,最好使用employee_id和supervisor_id完成链接。