SQL NOT IN NULL的问题
2013-05-24 08:43
357 查看
在sql查询中,有时候会遇到如下情况:两个表table1(10万条唯一的记录,table2(1万条唯一的记录)都只有一个字段:col001 在执行:select count(*) from table1 where col001 not in (select col001 from table2)时,如果table2中有null的话,这句话就有可能执行的结果为0,但是如果把table2中的null删掉的话就又正常了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL-92标准要求对空值的等于(=)或不等于(<>)比较取值为FALSE。当SET ANSI_NULLS为ON时,即使 column_name中存在空值,使用WHERE column_name = NULL的SELECT语句仍返回零行;即使column_name中存在非空值,使用WHERE column_name <> NULL的SELECT语句仍返回零行。
当SET ANSI_NULLS为OFF时,等于(=)和不等于(<>)比较运算符不遵从SQL-92标准。使用WHERE column_name = NULL的SELECT语句返回column_name中含有空值的行。使用WHERE column_name <> NULL的SELECT语句返回列中含有非空值的行。此外,使用WHERE column_name <> XYZ_value的SELECT语句返回所有非XYZ值和非NULL的行。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------select * from table1 t where not exists(select 1 from table2 where
ID=t.ID)--用exists
select count(*) from table1 where col001 is not null and col001 not in (select col001 from table2)
子查询必须排除NULL值.例如:
select count(*) from table1 where col001 not in(select col001 from table2 WHERE col001 IS NOT NULL)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL-92标准要求对空值的等于(=)或不等于(<>)比较取值为FALSE。当SET ANSI_NULLS为ON时,即使 column_name中存在空值,使用WHERE column_name = NULL的SELECT语句仍返回零行;即使column_name中存在非空值,使用WHERE column_name <> NULL的SELECT语句仍返回零行。
当SET ANSI_NULLS为OFF时,等于(=)和不等于(<>)比较运算符不遵从SQL-92标准。使用WHERE column_name = NULL的SELECT语句返回column_name中含有空值的行。使用WHERE column_name <> NULL的SELECT语句返回列中含有非空值的行。此外,使用WHERE column_name <> XYZ_value的SELECT语句返回所有非XYZ值和非NULL的行。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------select * from table1 t where not exists(select 1 from table2 where
ID=t.ID)--用exists
select count(*) from table1 where col001 is not null and col001 not in (select col001 from table2)
子查询必须排除NULL值.例如:
select count(*) from table1 where col001 not in(select col001 from table2 WHERE col001 IS NOT NULL)
相关文章推荐
- DB2 SQL NOT IN NULL的问题
- SQL NOT IN NULL的问题
- 为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录
- SQL 范围查询问题遇见与扩展学习 IN; NOT IN; NOT EXISTS;BETWEEN AND
- 小心 SQL NOT IN 子查询的结果含有 null 值时的陷阱!
- sql not in 发生歧义的问题
- SQL Not in null
- Oracle SQL NULL 值对 IN/NOT IN语句的影响
- sql server not in 问题无法正常查询结果
- T-SQL not in 遇到 null 暗含的陷阱
- sql not in 一个与直觉相反的问题
- SQL NOT IN constraint and NULL values
- oracle SQL not in null,单列,复合列
- mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
- sql not in 一个与直觉相反的问题
- mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
- mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
- pandas使用read_sql遇到的编码问题('latin-1' codec can't encode characters in position 12-15: ordinal not in r)
- SQLSERVER not in 的问题
- SQLSERVER not in 的问题