Why MYSQL IN keyword not considering NULL values

前端 未结 6 2026
夕颜
夕颜 2020-12-06 05:40

I am using the following query:

select count(*) from Table1 where CurrentDateTime>\'2012-05-28 15:34:02.403504\' and Error not in (\'Timeout\',\'Connectio         


        
6条回答
  •  清歌不尽
    2020-12-06 06:33

    Sorry for posting twice in the same forum, but I want to illustrate another example:

    I agree with @Wagner Bianchi in [2] in this forum when he says: << It’s very trick when dealing with data and subqueries>>

    Moreover, this should NOT be the behavior, I think Mysql's designers are mistaken when they made this decision documented in [1]. The design should be different. Let me explain: You know that when comparing

    select (2) not in (1, 4, 3);
        you will get:
            +----------------------+
            | (2) not in (1, 4, 3) |
            +----------------------+
            |                    1 |
            +----------------------+
            1 row in set (0.00 sec)
    

    BUT if in the list you have at least one NULL then:

    select (2) not in (1, NULL, 3);
        throws:
            +-------------------------+
            | (2) not in (1, NULL, 3) |
            +-------------------------+
            |                    NULL |
            +-------------------------+
            1 row in set (0.00 sec)
        This is pretty absurd.
    

    We are not the first ones in getting confused by this. See [2]

    References:

    [1] http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in

    [2] http://blog.9minutesnooze.com/sql-not-in-subquery-null/comment-page-1/#comment-86954

提交回复
热议问题