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