select unique owner
from all_tables
where sysdate-50 < (select last_analyzed from dual);
我刚刚写了上面的代码,奇怪的是结果与下面的代码不同。
select unique owner from all_tables;
但是,如果我select last_analyzed from dual
单独执行 ( ),则会弹出一个错误。
我很困惑结果是如何产生的。
您的查询有一个不必要的子查询。这是等价的:
select unique owner from all_tables T
where sysdate-50 < T.last_analyzed;
它从 中last_analysed
作为一列all_tables
,因为其中没有这样的列dual
- 我想这是范围的影响。如果用别名写就更清楚了:
select unique owner
from all_tables t
where sysdate-50 < (select t.last_analyzed from dual);
您根本不需要子查询,您可以这样做:
select unique owner
from all_tables
where last_analyzed >= sysdate-50;
(我怀疑这是错误的方式;如果您正在寻找陈旧的统计数据,我认为您想要< sysdate-50
)。
last_analyzed 是 all_tables 中具有日期值的列之一。您不能单独运行子查询