MySQL IS NULL无效

时间:2014-06-17 09:17:20

标签: mysql sql null isnull

有一些(困难的)MySQL查询

SELECT
    *,
    (
        SELECT
             MIN(tbl.id)
        FROM
           stat tbl 
        WHERE   
            tbl.id > stat.id
            and tbl.user_id=stat.user_id
    ) next_session_id,  
    (
        Select
            (case
                when next_session_id IS NULL then '9999-12-31 23:59:59' else sub.date
            end)
        from
            stat sub
        where 
            sub.id=next_session_id
    ) next_date
FROM
    stat    
WHERE       
    user_id=15973
    and date >'2014-06-01'  

接下来的问题,对于最后一行next_session_idNULL(在MySQL Workbench中检查),它必须返回日期时间'9999-12-31 23:59:59',但返回NULL。检查IS NULL我认为或不正确。它为什么会发生? 的更新 结果集的示例 enter image description here

4 个答案:

答案 0 :(得分:1)

在数据库中,NULL和''(空字符串)不同。因此,请确保您的表格中包含NULL值,而不是''(空字符串)。

使用您的表格检查此查询 SELECT * FROM TABLE WHERE next_session_id=''

答案 1 :(得分:1)

尝试更改此部分

Select
    (case
        when next_session_id IS NULL then '9999-12-31 23:59:59' else sub.date
    end)
from
    stat sub
where 
    sub.id=next_session_id

    case
        when next_session_id IS NULL then '9999-12-31 23:59:59' else (
            Select sub.date
            from
            stat sub
            where 
            sub.id=next_session_id)
    end

因为在MySQL中,NULL = NULL不会计算为true。

答案 2 :(得分:1)

您应该将OR next_session_id IS NULL添加到子选择的WHERE子句

SELECT
    (CASE
        WHEN next_session_id IS NULL THEN '9999-12-31 23:59:59' ELSE sub.date
    END)
FROM
    stat sub
WHERE 
    sub.id=next_session_id OR next_session_id IS NULL

因为没有它,where条件不会成立,如果next_session为null。

答案 3 :(得分:0)

我认为IS NULL由于某种原因无效,因此您可以使用= '', 例如x is null您可以使用x = ''代替。