我想比较来自不同表的时间戳。我想获取 tbl_1 中的标记大于 tbl_2 中的 MAX(stamp) 的所有行。
select *
from tbl_1
where timestamp > (select MAX(TIMESTAMP) from tbl_2);
不幸的是,这不起作用。我总是得到零结果:/。两列的数据类型都是日期/时间
好的,我发现了问题。
问题是如果 tbl_2 是空的并且没有日期,它不会返回任何东西。但是,当我输入较小的日期时,它可以工作。
从作者的回答中回答问题...
您可以使用NVL
考虑子查询返回 NULL 的可能性(当tbl_2
为空时):
select *
from tbl_1
where timestamp > NVL((select MAX(TIMESTAMP) from tbl_2), timestamp - 1);
我发现进行手动比较会有所帮助。运行您的查询
select MAX(TIMESTAMP) from tbl_2
并查看其中的日期是否比您在 tbl_1 中的任何日期大
select MAX(TIMESTAMP) from tbl_1
如果是这样,这就解释了为什么您没有得到结果,您将不得不查看那些大时间戳以确定是否需要更改记录。
为了使它工作以返回所有行,即使您为 tbl_2 中的 MAX(TIMESTAMP) 查询返回 NULL
select *
from tbl_1
where timestamp > (select MAX(TIMESTAMP) from tbl_2) or (select MAX(TIMESTAMP) from tbl_2) is null;