sqlite SQL子查询任务

prdp8dxp  于 2023-01-09  发布在  SQLite
关注(0)|答案(2)|浏览(205)

我正在尝试解决以下任务。
以下数据定义定义了组织的员工层次结构。
如果任何其他员工的managerId设置为第一个员工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)

结果并不理想,怎么了

vecaoik1

vecaoik11#

通过添加ManagerID is not null作为where条件,它可以防止返回null并打乱NOT IN的预期用途。

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

mm9b1k5b2#

如果子查询返回null,则NOT IN将不起作用:
因此,我将使用NOT EXISTS而不是NOT IN

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

相关问题