当我在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
... ...
提前致谢!
答案 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重命名列。让我知道。