Справочная документация по языку Oracle 19 SQL, похоже, не допускает ни одного из следующих синтаксисов, но, тем не менее, действительна.
SELECT *
FROM A
LEFT JOIN B
INNER JOIN C
ON B.b_id = C.b_id
ON A.a_id = C.a_id
SELECT *
FROM A
LEFT JOIN (B
INNER JOIN C
ON B.b_id = C.b_id)
ON A.a_id = C.a_id
Причины подозрения, что документация неверна :
Внутренняя часть соединения не является допустимой table_reference :: = в пределах external_join_clause :: = согласно документации.
Предложение external_join_clause :: = допускает вариант not с указанием ON condition
и join_clause :: = допускает немедленное выполнение inner_cross_join_clause :: = ; однако синтаксические диаграммы не предлагают пути назад к добавлению окончательного ON condition
.
В других местах синтаксических диаграмм проявляется осторожность, чтобы показать, когда и где можно использовать круглые скобки. Использование скобок, показанное во втором примере, допустимо, но не задокументировано как таковое в документации.
Кажется, синтаксическая диаграмма будет более точной для external_join_clause :: = для ссылки на параметр либо table_reference :: = , либо join_clause :: = и , требуется либо ON condition
или USING (...)
.
Пункт о скобках, по общему признанию, второстепенный, но вопрос о необязательном join_clause :: = кажется существенным.
Это Oracle SQL Ошибка справочной документации по языку?
Заранее спасибо.