我有一个包含用户名列的人员表。我还有一个包含用户名列的学生表。"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
中的任何USERNAME
是NULL
,则表达式的计算结果为NULL
。这会过滤掉所有行。我猜这是你的问题。
要解决此问题,我建议不要将NOT IN
与子查询一起使用。只需习惯使用NOT EXISTS
:
where username = 'david' and
not exists (select 1 from student s where s.USERNAME = people.username)