Понимание вложенных объединений - PullRequest
0 голосов
/ 29 мая 2020

Я встречал вложенные соединения, которые logi c я не могу понять.

Имена таблиц не важны, запрос, из которого я это извлек, - работает. * Было использовано много круглых скобок и сокращений JOIN, и вопрос в том, как мне «декодировать» это в стандартный синтаксис JOIN, избегая всех этих сокращений?

1 Ответ

0 голосов
/ 29 мая 2020

Здесь нет вложенности. Круглые скобки были опущены здесь и там, чтобы скрыть код, который в основном эквивалентен:

select *
FROM sea
JOIN bold
JOIN genuine
LEFT JOIN community_genuine_inspire ON genuine.id = community_genuine_inspire.id_genuine
LEFT JOIN community_genuine ON community_genuine.id = community_genuine_inspire.id_community
JOIN cooperate

Является ли предложение ON необязательным? Да, это так. Это то, что документы именуются join_specification и показаны в скобках, синтаксис документации означает необязательный :

joined_table: {
    table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]
  | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
  | table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
}

join_specification: {
    ON search_condition
  | USING (join_column_list)
}

Если вы его опустите, я полагаю, вы получите a CROSS JOIN (декартово произведение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...