在SQL Developer中向查询结果添加一列

时间:2015-03-05 19:44:39

标签: sql oracle

当我在SQL Developer中运行此代码时,

SELECT EMPLOYEE_ID AS NON_MANAGER_EMPLOYEES
FROM EMPLOYEES 
MINUS
SELECT MANAGER_ID 
FROM EMPLOYEES;

节目:

NON_MANAGER_EMPLOYEES
104
107
141
142
143
144
174
176
178
200
202
206

这就是我想要的。现在我只想添加一个列,以便用它显示它们的姓氏。将LAST_NAME投放到选择语句中:

SELECT EMPLOYEE_ID AS NON_MANAGER_EMPLOYEES, LAST_NAME
FROM EMPLOYEES 
MINUS
SELECT MANAGER_ID, LAST_NAME
FROM EMPLOYEES;

不起作用。它玷污了MINUS。如何在不破坏MINUS的情况下添加该信息?或者更确切地说:

NON_MANAGER_EMPLOYEES     LAST_NAME
104                       Ernst
107                       Lorentz
141                       Rajs
...                       ...

提前致谢!

3 个答案:

答案 0 :(得分:2)

一个选项是join将结果返回到employee表并使用子查询:

SELECT E.EMPLOYEE_ID, E.LAST_NAME
FROM EMPLOYEES E
    JOIN (
        SELECT EMPLOYEE_ID
        FROM EMPLOYEES 
        MINUS
        SELECT MANAGER_ID
        FROM EMPLOYEES
    ) E2 ON E.EMPLOYEE_ID = E2.EMPLOYEE_ID

如果我理解您的预期结果,那么这是使用NOT IN的替代方法:

select employee_id, last_name
from employees e
where employee_id not in (select manager_id from employees)

答案 1 :(得分:2)

减号在这里真是错误的操作。我会改用EXISTS。例如,

SELECT employee_id AS non_manager_employees, last_name
  FROM employees e
 WHERE NOT EXISTS
 (SELECT NULL FROM employees m WHERE e.employee_id = m.manager_id)

这将过滤掉给定员工也是经理的任何行。

或者,您可以使用此语法(但它会执行相同的操作)。

SELECT e.employee_id AS non_manager_employees, e.last_name
  FROM employees e
  LEFT JOIN employees m ON m.manager_id = e.employee_id
 WHERE m.employee_id IS NULL;

答案 2 :(得分:0)

我使用EXCEPT KEYWORD在sql server中对此进行了测试,它运行正常。

 SELECT empid 'NonEmployees',  lastname from employeetable
 EXCEPT
 SELECT managerid, lastname 
 FROM employeetable
 where managerid is not null

请使用MINUS关键字而不是EXCEPT并在Oracle中尝试,也包括As重命名列。让我知道。