【问题标题】:mysql NULL value in where in CLAUSEmysql NULL 值在哪里在 CLAUSE
【发布时间】:2011-04-24 05:22:44
【问题描述】:

如何处理mysql中的NULLwhere in CLAUSE

我试试看

SELECT * FROM mytable WHERE field IN(1,2,3,NULL)

它不工作

只能像这样工作:

SELECT * FROM mytable WHERE field IN(1,2,3) OR field IS NULL

我怎样才能让它在WHERE IN 中工作?有可能吗?

【问题讨论】:

标签: mysql null where-clause


【解决方案1】:

在 IN 运算符中使用 UNION 作为子查询可以获取 tableIds 作为列表,并从中可以得到具有 NULL 值的结果。

例如:

选择 * 从 我的表 在哪里 mytable.id ( 选择 mytable.id 来自我的表 其中 mytable.field 为 NULL 联盟 选择 mytable.id 来自我的表 WHERE mytable.field IN(1,2,3) )

【讨论】:

    【解决方案2】:

    有一个名为 COALESCE 的 MySQL 函数。它返回列表中的第一个非NULL 值,如果没有非NULL 值,则返回NULL

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

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

    SELECT * FROM mytable WHERE COALESCE(field,-1) IN (1,2,3,-1)
    

    仅当字段为 1,2 或 3 或字段为 NULL 时才会匹配。

    【讨论】:

    • 非常感谢
    【解决方案3】:

    以下陈述应该会有所帮助:

    SELECT * FROM mytable WHERE COALESCE(field,0) IN (1,2,3,0)
    

    【讨论】:

    • 欢迎来到SO,请解释您的答案代码,只有答案在很多情况下不是很有用。
    • 是什么让您认为简单地转储查询会有所帮助? 该查询如何回答给定的问题?
    【解决方案4】:

    据我了解,您希望使用 1、2、3 和空值提取每条记录。

    我认为不可能在 IN 运算符中放置 null。它的期望值和 null 很好......不是一个值。所以你真的必须把 OR 和 null 放在一起才能得到想要的结果。

    【讨论】:

      【解决方案5】:

      也许来自MySQL Reference Manual 的这些信息会有所帮助:

      为了符合 SQL 标准,IN 不仅在左侧的表达式为 NULL 时返回 NULL,而且如果在列表中没有找到匹配项并且 列表中的表达式之一为 NULL。

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 2013-07-30
        • 2020-10-06
        • 2011-06-01
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        相关资源
        最近更新 更多