热搜:NVER node 开发 php

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

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

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