where E_ID=null和where E_ID=is null的区别
这里有一个A表其中ID为主键,E_ID为其中一个字段
表里有两条数据,一条数据E_ID值为3,另一条E_ID为空。
使用查询
SELECT * FROM A WHERE E_ID=NULL
查询不到E_ID为空的数据
改为SELECT * FROM A WHERE E_ID is NULL查询正常!
为什么?
------解决方案--------------------null不能比较
只能是is null is not null
你可以自己测试下
------解决方案--------------------尊重原创,源出处:http://blog.csdn.net/smile2me27/archive/2004/11/11/177101.aspx
在SQL2000中Null值的比较运算有两种规则。一种是ANSI SQL(SQL-92)规定的Null值的比较取值结果都为False,既Null=Null取值也是False。另一种不准循ANSI SQL标准,即Null=Null为True。
以一张表T的查询为例。
表T存在下面的数据:
RowId Data
--------------
1 'test '
2 Null
3 'test1 '
按照ANSI SQL标准,下面的两个查询都不返回任何行:
Query1: select * from T where Data=null
Query2: select * from T where Data <> null
而按照非ANSI SQL标准,查询1将返回第二行,查询2返回1、3行。
ANSI SQL标准中取得Null值的行需要用下面的查询:
select * from T where Data is null
反之则用is not null。由此可见非ANSI SQL标准中Data=Null等同于Data Is Null,Data <> Null等同于Data Is Not Null。
而控制采用那一种规则,需要使用命令SET ANSI_NULLS [ON/OFF]。ON值采用ANSI SQL标准,OFF值采用非标准模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换,只是这个命令控制的是一组符合SQL-92标准的设置,其中就包括Null值的标准。
默认情况下,数据库管理程序(DB-Library)是SET ANSI_NULLS为OFF的。