Oracle中的奇怪SQL执行结果

时间:2012-07-20 08:13:11

标签: sql oracle subquery

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),则会弹出错误。

我很困惑如何生成结果。

3 个答案:

答案 0 :(得分:2)

您的查询有一个不必要的子查询。这相当于:

select unique owner from all_tables T
where sysdate-50 < T.last_analyzed;

我希望这可以帮助您了解您获得的结果。

答案 1 :(得分: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)。

答案 2 :(得分:0)

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