【MySql】NOT IN()失效
SELECT * FROM test WHERE number NOT IN (4,7,10),数据库中有满足条件的数据,却一条也查不到。
一、问题描述
有以下数据表:
test1
id name sex 1 张三 男 2 阿松大 女 3 偶 女 4 王五 女 5 李四 男 test2
id desc test1_id 20 啊速度 3 21 爱说大话 5 22 单个 null 23 电饭锅 1 24 士大夫 null
执行以下SQl影响行数为0,单独执行子查询可以查到数据,但是test1表中数据确实没变化:
DELETE FROM test1 WHERE id NOT IN (SELECT test1_id from test2)
二、解决
原因:
使用 not in 的时候,如果 not in 后面的选项中有 null,不会查询出来任何数据。sql 语句本身直接返回 false ,所以使用 not in 的时候,要保证 in 中的条件不会出现 null 的情况
sql修改为:
DELETE FROM test1 WHERE id NOT IN (SELECT test1_id from test2 WHERE test1_id IS NOT NULL)