SQL 子查询任务



我正在尝试解决以下任务。

以下数据定义定义组织的员工 等级制度。

如果任何其他员工设置了经理 ID ,则员工是经理 到第一个员工 ID。作为经理的员工可能会也可能不会 还有一个经理。

TABLE employees   
id INTEGER NOT NULL PRIMARY KEY
managerId INTEGER REFERENCES employees(id)   
name VARCHAR(30) NOT NULL

编写一个查询,以选择非 经理。

我试过:

SELECT name FROM employees where id NOT IN (SELECT managerId FROM employees)

这不会给出预期的结果。怎么了?

通过将 ManagerID 不为 null 添加为 where 条件,它可以防止 null 返回并弄乱您对 NOT IN 的预期用途。

SELECT name
FROM employees
where id NOT IN (
SELECT managerId FROM employees where managerId is not null
)

如果子查询返回nullNOT IN将不起作用:

所以,我会使用NOT EXISTS而不是NOT IN

SELECT e.name 
FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM employees ee WHERE ee.managerId = e.id);

最新更新