如何在新列中返回结果

问题描述

我有以下工作查询

    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','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','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','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','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','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”列。我要创建它

这是表结构:

enter image description here

解决方法

根据您的表结构,我假设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完成链接。