在CLAUSE中的mysql NULL值

Hai*_*vgi 10 mysql null where-clause

如何 CLAUSE 中的mysql 处理NULL

我尝试了

SELECT * FROM mytable WHERE field IN(1,2,3,NULL)
Run Code Online (Sandbox Code Playgroud)

它不起作用

只有像:

SELECT * FROM mytable WHERE field IN(1,2,3) OR field IS NULL
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用WHERE IN?有可能的 ?

kra*_*tan 7

也许这些来自MySQL参考手册的信息有助于:

为了符合SQL标准,IN不仅在左侧的表达式为NULL时返回NULL,而且如果在列表中找不到匹配且列表中的一个表达式为NULL,则返回NULL.


Eme*_*ion 7

根据我的理解,你想用1,2,3和null值拉每条记录.

我认为不可能在IN运算符中放置null.它期望值和null很好..不是值.所以你真的必须使用null和OR来获得所需的结果.


swe*_*edo 7

有一个名为COALESCE. 它返回NULL列表中的第一个非值,或者NULL如果没有非NULL值。

例如,如果您运行,SELECT COALESCE(NULL, NULL, -1);您将-1返回,因为它是第一个非NULL值。

所以这里的技巧是将你的表达式包装在 中COALESCE,并添加一个值作为最后一个参数,你也添加到你的IN函数中。

SELECT * FROM mytable WHERE COALESCE(field,-1) IN (1,2,3,-1)
Run Code Online (Sandbox Code Playgroud)

仅当 field 为 1,2 或 3 或 field 为 时才匹配NULL