Access中备注型字段为null时,查询会出现的问题?(100分)

  • 主题发起人 主题发起人 mycwcgr
  • 开始时间 开始时间
M

mycwcgr

Unregistered / Unconfirmed
GUEST, unregistred user!
下面bz为备注型字段,有些记录为null
1. select * from table where bz like '%aa%'
2. select * from table where not (bz like '%aa%')

上面两个查询到的记录总数相加,居然不等于数据库中的全部记录数,不信您试一试?
其中查询1正常。
问题出在查询2中,事实上它查询的是这样一种情况:查询数据库中bz字段不为null并且它的值不等于aa的记录。
它居然漏到了bz字段为nul的情况。请问这是不是Access问题????
 
所有数据库都是这样的,这样才是标准的
1、只有条件为true的记录才能被选择
2、条件其实有3个结果,true,false,null,当结果为false和null的记录都不能被选择
3、null大部分的操作的结果都是null,比如算术运算、like等等
(所以 bz like '%xx%' 当bz是null时逻辑运算结果为null,它不同于false)
4、关键是, null的结果值 not 一下并不是true, false的相反才是true,null的相反还是null
所以它不被选择。

你可以配合使用 bz is null
 
关系表达式的结果除了true,false难道还有null?
 
对如果你想把null和在not里面可以试试这样写

select * from table where not (bz like '%aa%') and bz is null
 
to mycwcgr,
当然,这是sql的标准。
在oracle把逻辑值null称作UNKNOWN,是一样的意思
处理null值要小心,比如
1=null 的结果是unknown
1<>null 的结果也是unkown
null=null null<>null 都是 unkown
它们都不能被选择。
所以不要以为“a=b”不成立的“a<>b”就一定成立,当a、b之中有一个null时就2个表达式
都不是true,就都不能被选择
 
接受答案了.
 
后退
顶部