首页 > 解决方案 > Oracle SQL in 和 not in 都返回空

问题描述

我有一个包含用户名列的人员表。我还有一个包含用户名列的学生表。“大卫”存在于人员表中,但不存在于学生表中。

当我运行它时,我没有得到不正确的结果:

Select      USERNAME
From        PEOPLE
Where       username = 'david' and USERNAME not in (Select USERNAME From STUDENT) 
Order By    USERNAME

但是,当我运行它时,我也没有得到任何结果。这怎么可能?

Select      USERNAME
From        PEOPLE
Where       username = 'david' and USERNAME in (Select USERNAME From STUDENT) 
Order By    USERNAME

标签: sqloracleoracle-sqldeveloper

解决方案


如果任何USERNAMEinstudentNULL,则表达式的计算结果为NULL。这会过滤掉所有行。我猜那是你的问题。

要解决这个问题,我建议不要使用NOT IN子查询。只需习惯使用NOT EXISTS

where username = 'david' and
      not exists (select 1 from student s where s.USERNAME = people.username)

推荐阅读