Странный синтаксис соединения в устаревшем коде SQL - PullRequest
1 голос
/ 05 октября 2010

У меня есть какой-то устаревший код, который я прохожу, и я только что нашел объединение с двумя предложениями "on" ...

select * from table
inner join table3
inner join table2 on table3.key = table2.fkey on table.key = table2.otherkey

Что означает этот тип объединения?(В настоящее время это работает, поэтому это не синтаксическая ошибка)

(Редактировать: Исправлен код, пропущено соединение)

1 Ответ

4 голосов
/ 05 октября 2010

Разместите ваше редактирование, это всего лишь случай знания неявного приоритета.

select * from table1
inner join table3
inner join table2 on table3.key = table2.fkey on table1.key = table2.otherkey

совпадает с

select * from 
table1 inner join 
   (table3 inner join table2 on table3.key = table2.fkey)
on table1.key = table2.otherkey

, что, надеюсь, имеет больше смысла. Все, что я сделал здесь, это добавил круглые скобки.

Первое объединение, от table3 до table2, концептуально говоря, создает промежуточную таблицу со всеми столбцами из обоих. table1 затем присоединяется к этому, используя второе предложение on, которое вы видите.

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