有一些(困难的)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_id
是NULL
(在MySQL Workbench中检查),它必须返回日期时间'9999-12-31 23:59:59'
,但返回NULL
。检查IS NULL
我认为或不正确。它为什么会发生?
的更新
结果集的示例
答案 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 = ''
代替。