Странный результат выполнения SQL в Oracle

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 ответа

Это берет 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).

Ваш запрос содержит ненужный подзапрос. Это эквивалентно:

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

Я надеюсь, что это поможет вам понять результаты, которые вы получаете.

last_analyzed является одним из столбцов all_tables, который имеет значение даты. Вы не можете запустить подзапрос в одиночку

Другие вопросы по тегам