Кузнецов Евгений wrote:

Я тут еще немножко поэкспериментировал
и получил следующее (ясно, что этот пример работать не будет):
SQL> select *
CON> from master1 m  left join
CON> (select first 1 * from detail1 d where d.MASTER_ID = m.ID order by d.id) d
CON>    on m.id = d.master_id;
Statement failed, SQLCODE = -206
Dynamic SQL Error
-SQL error code = -206
-Column unknown
-M.ID
-At line 4, column 16

Line 4, column 16 - это d.master_id в on m.id = d.master_id
Видимо, сервер "разворачивает" derived table и проверяет синтаксис запроса только при обращении к ней.
As designed или trivial bug?

На этапе парсинга (и синтаксиса вообще), внутренности DT есть отдельный контекст, где M.ID невидим. Так говорит нам стандарт. Оптимизатор потом может при необходимости внедрить предикат внутрь, но это его личное дело. Так что as designed.


--
Дмитрий Еманов

Ответить