【问题标题】:SQL subquery taskSQL 子查询任务
【发布时间】:2018-10-12 13:11:30
【问题描述】:

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

以下数据定义定义了组织的员工 层次结构。

如果任何其他员工设置了 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)

没有给出想要的结果。怎么了?

【问题讨论】:

  • 这很奇怪,我认为它有效。你能提供样本数据并显示它返回的你不想要的东西吗?

标签: sql sqlite select


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果子查询返回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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多