IN 和 INLIST() 在 where 条件中有缺陷
IN 和 INLIST() 在 where 条件中有缺陷,以下语句的where 条件返回的全是 真 值 (只是测试,随便一个数据表)SELECT * FROM c:\tmp WHERE '02' in ('0201')
SELECT * FROM c:\tmp WHERE '0201' in ('02')
SELECT * FROM c:\tmp WHERE '0201' in ('020101')
SELECT * FROM c:\tmp WHERE INLIST('02','0201')
SELECT * FROM c:\tmp WHERE INLIST('0201','02')
SELECT * FROM c:\tmp WHERE INLIST('0201','020101')
--------------------------------------------------------------
本来用数字直接表示 条件表达式中它们的关系,而这样的关系,条件表达式却返回 真 值。可现在看来真需要给个例子了.
如 有个表(就dm这字段吧),里有如下这些记录。
dm
0201
02
0202
0204
那么我想查询 DM 为 02和0202的记录。
select * from 表 where INLIST(dm,'0202','02')
结果出来:
0201
02
0202
0204
你们试是否这样。
-------------------------------------------
现找到解决这问题的初步办法(还需大量数据验证)。
办法就是在各字符子串后加上一个空格
如 INLIST(dm,'0202 ','02 ')
或 dm in ('0202 ','02 ')
select * from 表 where INLIST(dm,'0202 ','02 ')
现在发现多加的这空格很奥妙,
select * from 表 where dm='02 ' &&多了一个空格
select * from 表 where dm=='02'
以上这两句是等价的
而下面的结果就非常不一样了.
select * from 表 where dm='02' &&没加空格
[ 本帖最后由 kiff 于 2013-3-25 17:44 编辑 ]