Oracle SQL Справочник по языку Ошибка документации по внешнему соединению? - PullRequest
0 голосов
/ 28 мая 2020

Справочная документация по языку 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

Причины подозрения, что документация неверна :

  1. Внутренняя часть соединения не является допустимой table_reference :: = в пределах external_join_clause :: = согласно документации.

  2. Предложение external_join_clause :: = допускает вариант not с указанием ON condition и join_clause :: = допускает немедленное выполнение inner_cross_join_clause :: = ; однако синтаксические диаграммы не предлагают пути назад к добавлению окончательного ON condition.

  3. В других местах синтаксических диаграмм проявляется осторожность, чтобы показать, когда и где можно использовать круглые скобки. Использование скобок, показанное во втором примере, допустимо, но не задокументировано как таковое в документации.

Кажется, синтаксическая диаграмма будет более точной для external_join_clause :: = для ссылки на параметр либо table_reference :: = , либо join_clause :: = и , требуется либо ON condition или USING (...).

Пункт о скобках, по общему признанию, второстепенный, но вопрос о необязательном join_clause :: = кажется существенным.

Это Oracle SQL Ошибка справочной документации по языку?

Заранее спасибо.

...