赞
踩
现有如下两张表usertable和usergrade
SQL> select * from usertable; USERID USERNAME | SQL> select * from usergrade; USERID USERNAME GRADE | ||||||
1 | user1 | 1 | user1 | 90 | |||
2 | null | 2 | null | 80 | |||
3 | user3 | 7 | user7 | 80 | |||
4 | null | 8 | user8 | 90 | |||
5 | user5 | ||||||
6 | user6 |
语句一:select count(*) from usergrade where username in (select username from usertable);
语句二: select count(*) from usergrade where username not in (select username from usertable);
语句大体意思为找出两张表username的差别
当执行语句一时
预期结果:1
实际结果:1
当执行语句二时
预期结果:2
实际结果:0
语句一执行时,null不计入考虑范围内,结果符合预期。
语句二执行时,按照先前思路,null也不计入考虑范围内,结果不符合预期。
网上查询not in使用注意事项,然后发现问题所在。
not in 子查询不能存在null的字段,否则会导致条件失效,sql语句查不出所需数据
当查询语句有 in 条件时,应注意子查询字段为空的数据不计入查询范围。
当查询语句有not in条件时,应注意子查询字段不能有空数据,否则会产生查询失效。
因此,当出现not in 查询条件时,子查询应当添加不为空筛选条件。
where tablename.column is not null
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。