Oracle SQL in和not in都返回空



我有一个包含用户名列的人员表。我还有一个包含用户名列的学生表。"David";存在于人员表中,但不存在于学生表中。

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

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

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

要解决此问题,我建议不要NOT IN与子查询一起使用。只需习惯使用NOT EXISTS:

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

最新更新