日期:2014-05-17  浏览次数:20552 次

很奇怪,同一个表,运行下面三个语句,结果竟然不同!!!
select count(*) from yeezong where 状态='已缴费'
select count(*) from yeezong 
select count(*) from yeezong where 状态<>'已缴费'
在一个表中,状态有很多,不等于已缴费+已缴费=总和才对。但是结果,不等于已缴费的。竟然少很多。为什么呢?
上面查询
结果是:
 776 ;
 886 ;
 9 
为什么呢?

------解决方案--------------------
是不是你查询的时候数据发生了变化啊~
select * from yeezong where id not in(
select id from yeezong where 状态='已缴费'
)

------解决方案--------------------
状态 = NULL
create table #(stat varchar(10))
insert # select '已缴费'
insert # select '未缴费'
insert # select null

select count(*) from # where stat = '已缴费'
select count(*) from # where stat <> '已缴费'
select count(*) from #


------解决方案--------------------
引用:
select count(*) from yeezong where isnull(状态,'')<>'已缴费'


同意有NULL值存在。 
------解决方案--------------------
应该是null值作祟~刚想来着,想其他情况的时候又给忘了
------解决方案--------------------
1、null值情况可能性最大。
2、select distinct 状态 from yeezong 就知道是不是第一个原因了
------解决方案--------------------
引用:
select count(*) from yeezong where 状态='已缴费'
select count(*) from yeezong 
select count(*) from yeezong where 状态<>'已缴费'
在一个表中,状态有很多,不等于已缴费+已缴费=总和才对。但是结果,不等于已缴费的。竟然少很多。为什么呢?
上面查询
结果是:
……



select count(*) from yeezong 

select count(*) from yeezong where 状态='已缴费'
select count(*) from yeezong where 状态<>'已缴费'
select count(*) from yeezong where 状态 is null

------解决方案--------------------
肯定存在状态不一致的数据
------解决方案--------------------
引用:
select count(*) from yeezong where 状态='已缴费'
select count(*) from yeezong 
select count(*) from yeezong where 状态<>'已缴费'
在一个表中,状态有很多,不等于已缴费+已缴费=总和才对。但是结果,不等于已缴费的。竟然少很多。为什么呢?
上面查询
结果是:
……


看看这个运行了是啥结果.
select 状态,count(1) from yeezong group by 状态

------解决方案--------------------
引用:
null也查询过,也找不到。最后直接去后台,一个个找到没有状态的,也就是空值的也加上一个状态,完事。谢谢大家的回答。但还是想问:如果是空值。用select count(*) from yeezong 状态<>'已缴费';应该也出来才是吧?


null 不等价于 ''

状态<>'已缴费',null是无法与'已缴费'进行<> 判断的哦。