最近发现mysql中,Int型字段的默认值会直接影响IN语法的查询。
如test表有个字段uid为int类型,默认值如果允许NULL,则下面的代码统计会不正确。
//返回110条记录
SELECT
count(1)
FROM
test
//若返回2条数据
SELECT
count(1)
FROM
test
WHERE
uid in (select uid from member where is_test=1)
//返回100条记录,没有返回108条正确记录
SELECT
count(1)
FROM
test
WHERE
uid not in (1111)//括号里的是何值没有关系,结果都不正确
将uid字段默认改为0,同是修改旧数据为NULL的为0再执行上述SQL,结果正常。
看样子,NULL值对IN语法产生了干扰。