我希望所有事件的开始日期都大于给定事件ID的开始日期(例如12345)。
我使用了以下查询:
SELECT *
FROM Events
WHERE StartDate > (SELECT StartDate
FROM Events
WHERE ID = 12345)
我的问题是:
答案 0 :(得分:0)
在这两种情况下,你都没有得到任何结果,因为没有什么比NULL大 (或小于或等于或不同)
select case
when (select sysdate from dual where dummy = 'Y') is null
then 'Y'
else 'N'
end as empty_result_set_is_null
from dual
;
empty_result_set_is_null
ÿ
select case
when sysdate+7 > (select sysdate from dual where dummy = 'Y')
then 'Y'
else 'N'
end as is_bigger
from dual
;
is_bigger
Ñ
select case
when sysdate > (select cast (null as date) from dual)
then 'Y'
else 'N'
end as is_bigger
from dual
;
is_bigger
Ñ
答案 1 :(得分:0)
如果没有ID为12345的事件会怎样?
由于子查询不返回任何行,而这些行在比较中将被视为NULL
值,因此不会返回任何内容。
然而,在这种情况下,您可以重新编写查询以返回某些内容。但是如果没有更多的信息,你想要实现的目标很难说明。
如果事件12345没有startDate,即具有空值
,会发生什么?
同样,不会返回任何内容,因为null值的任何比较都会返回“undefined” - 当用作where子句中的条件时 - 基本上与“false”相同。
如果需要,可以使用某个默认日期处理该空值。选择哪个默认值完全取决于您的需求。你可以,例如使用非常早的日期,或今天或非常晚的日期
SELECT *
FROM events
WHERE startdate > (SELECT coalesce(startdate, sysdate)
FROM events
WHERE id = 12345)