【MySql】NOT IN()失效

SELECT * FROM test WHERE number NOT IN (4,7,10),数据库中有满足条件的数据,却一条也查不到。

一、问题描述

  • 有以下数据表:

    • test1

    • idnamesex
      1张三
      2阿松大
      3
      4王五
      5李四
    • test2

    • iddesctest1_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)