Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle “不存在”和“不存在”之间的差异_Oracle_Plsql - Fatal编程技术网

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非常棒的解释,非常感谢