Oracle “不存在”和“不存在”之间的差异
请有人解释一下原因Oracle “不存在”和“不存在”之间的差异,oracle,plsql,Oracle,Plsql,请有人解释一下原因 select count(*) from employees where employee_id not in (select manager_id from employees) 返回0 显然,有些员工也是经理 我使用的是人力资源模式。基于此,您似乎试图将员工id与经理id链接起来,这可能是不同的 相反,您可以使用其他一些条件在employees表中标识经理,为经理查询匹配的employee_id值 SELECT COUNT(*) FROM employees WH
select count(*) from employees where employee_id not in (select manager_id from employees)
返回0
显然,有些员工也是经理
我使用的是人力资源模式。基于此,您似乎试图将
员工id
与经理id
链接起来,这可能是不同的
相反,您可以使用其他一些条件在employees表中标识经理,为经理查询匹配的employee_id值
SELECT COUNT(*)
FROM employees
WHERE employee_id NOT IN
(
SELECT employee_id
FROM employees
WHERE type = 'manager' -- or however you differentiate
-- employees and managers
)
根据查询,我建议您使用 不存在,因为它会给出布尔结果,从而提高性能
SELECT COUNT(*)
FROM employees
WHERE NOT EXISTS
(SELECT employee_id
FROM employees
WHERE type = 'manager' -- or however you differentiate
-- employees and managers
);
manager\u id
和employee\u id
是两个完全不同的键,它们很可能具有不同的值。您的表中有一个没有manager\u id的员工(CEO?),因此您的子查询包含空值,这会导致0。原因如下:@RobvanWijk这是一个有效的观点@RobvanWijk你应该把它作为一个答案。很多人不明白当集合中有null
s时notin
是如何工作的。@RobvanWijk非常棒的解释,非常感谢