0
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单独执行 ( ),则会弹出一个错误。

我很困惑结果是如何产生的。

4

3 回答 3

2

您的查询有一个不必要的子查询。这是等价的:

select unique owner from all_tables T
where sysdate-50 < T.last_analyzed;
于 2012-07-20T08:21:02.547 回答
2

它从 中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)。

于 2012-07-20T08:21:45.977 回答
0

last_analyzed 是 all_tables 中具有日期值的列之一。您不能单独运行子查询

于 2012-07-20T08:16:57.233 回答