首页 >后端开发 >php教程 >求教一个mysql查询问题:为什么我的SQL语句不能覆盖所有情况?内详

求教一个mysql查询问题:为什么我的SQL语句不能覆盖所有情况?内详

WBOY
WBOY原创
2016-06-23 14:16:591057浏览

mysql 查询

select count(*) from t1 where col1 > 0
339074条

select count(*) from t1 where col1 > 0 and LENGTH(col2) > 0
52308

select count(*) from t1 where col1 > 0 and LENGTH(col2) = 0
0

为什么第二条第三条查出来的结果之和和第一条查出来的结果不一样呢?

col2字段是varchar类型,长度150,存储的url地址(也可能为空或者为数字)
col1字段int类型,存储某编号 

另外:
select count(*) from t1 where col1 > 0 and col2 > 0
16484 

select count(*) from t1 where col1 > 0 and col2 = 0
32584

回复讨论(解决方案)

select count(*) from t1 where col1 > 0
339074条

select count(*) from t1 where col1 > 0 and LENGTH(col2) > 0
52308

select count(*) from t1 where col1 > 0 and LENGTH(col2) = 0
0

为什么第二条第三条查出来的结果之和和第一条查出来的结果不一样呢?

col2字段是varchar类型,长度150,存储的url地址(也可能为空或者为数字)
col1字段int类型,存储某编号 

另外:
select count(*) from t1 where col1 > 0 and col2 > 0
16484 

select count(*) from t1 where col1 > 0 and col2 = 0
32584
不一样很正常吧,col2字段是varchar类型,长度150存储的url地址(也可能为空或者为数字)
既然是字符串,那么你直接用col2 > 0 比较就已经有问题了,字符串都不能这么比较
这是其一,其二,字符串可能为空,又不是只有0或者大于0

select count(*) from t1 where col1 > 0 and col2 = ''
0

select count(*) from t1 where col1 > 0 and col2 != ''
52308

这样也不能全覆盖...

select count(*) from t1 where col1 > 0 and col2 is null 这样有没有值呢

我还是没看见你加我QQ啊,急死了- -

select count(*) from t1 where col1 > 0 and col2 is null 这样有没有值呢

有了...284786  原来是这样

多谢几位...

另外我加你QQ了你看下


select count(*) from t1 where col1 > 0 and col2 is null 这样有没有值呢

有了...284786  原来是这样

多谢几位...

另外我加你QQ了你看下 没有看见QQ消息啊。。。腾讯2B了么。我汗!!!

因为 col2 也可能为空: null
自然不属于 LENGTH(col2) = 0 范围

受教   以后mysql查字符串要考虑到is null 

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn