如何使用IN来基于值列表选择具有空值的行?

时间:2016-09-20 09:08:24

标签: php mysql sql database relational-database

我已经堆满了这个:

我正在尝试执行此查询:

SELECT * FROM my_table WHERE some_column IN(2, 3, 5, null)

OR

SELECT * FROM my_table WHERE some_column IN('wert','qw3e','dfg',null)

但是IN没有考虑NULL值,那么我尝试了这个:

SELECT * FROM my_table WHERE IF (4 is null, some_column is null, some_column IN (4))

此查询适用于ONE值,但正如您在第一个查询中所看到的,我需要考虑多个值,如何?

认为我需要创建一个接收参数的函数来查找:

function (param) 
 SELECT * FROM my_table WHERE IF (param is null, some_column is null, some_column IN (param))

由于

3 个答案:

答案 0 :(得分:3)

为什么不尝试以下方法

SELECT * FROM my_table WHERE some_column IN('wert','qw3e','dfg') OR some_column IS NULL

答案 1 :(得分:3)

SELECT * FROM my_table WHERE some_column IS NULL OR some_column IN('wert','qw3e','dfg')

答案 2 :(得分:2)

其他两个人已经回答了,但没有解释为什么IN(2, 3, 5, null)不返回有NULL的行。那是因为NULL是一个特殊值,它不等于任何东西。 NULL = NULL实际上计算结果为False。

 SELECT * FROM mytable WHERE NULL=NULL;

会返回一个空结果但是

 SELECT * FROM mytable WHERE NULL IS NULL;

wouuld返回表格中的所有行。因此,在IN数组中使用NULL对行中的空值进行比较会失败。所以你需要

 SELECT * FROM my_table WHERE some_column 
 IN('wert','qw3e','dfg') OR some_column IS NULL