Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объясните логику Join Join ON ON  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Есть запрос из 20 таблиц, и как то он работает примерно следующего содержания.

Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
left join table2 as t2
left join table3 as t3  ON t2.id=t3.id
left join table5 as t5
ON t1.id=t2.id ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS


Запрос составлен каким то генератором.

Вопрос: Какая логика при перечислении многих Join а затем ON ON.... Важен ли порядок ON t1 ON t2...?
4 дек 15, 15:33    [18514579]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
_Groxot_,

Возмите планы сравните, станет все понятно.
4 дек 15, 15:53    [18514702]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21101
_Groxot_
Какая логика при перечислении многих Join а затем ON ON....

Таблица, упомянутая в ON, должна ранее по тексту засветиться в JOIN. Больше никакой.

_Groxot_
Важен ли порядок ON t1 ON t2...?

Для результата - нет. Для плана - возможно, да.
4 дек 15, 17:12    [18515171]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
_Groxot_,

table1 объединяется с объединением ( table2 и table3 ) и объединяется с table5,
а table2 объединяется с table4.
4 дек 15, 17:19    [18515222]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
_Groxot_
Есть запрос из 20 таблиц, и как то он работает примерно следующего содержания.

Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
left join table2 as t2
left join table3 as t3  ON t2.id=t3.id
left join table5 as t5
ON t1.id=t2.id ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS


Запрос составлен каким то генератором.

Вопрос: Какая логика при перечислении многих Join а затем ON ON.... Важен ли порядок ON t1 ON t2...?

А так может понятнее
Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
left join
 table2 as t2
 left join table3 as t3 ON t2.id=t3.id
 left join table5 as t5 ON t1.id=t2.id
ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS
4 дек 15, 17:24    [18515262]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
iap
А так может понятнее
Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
left join
 table2 as t2
 left join table3 as t3 ON t2.id=t3.id
 left join table5 as t5 ON t1.id=t2.id
ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS
Мне - нет. В том месте, где присоединяется table5, в условии ON она не упоминается. Зато упоминается в другом месте, где t1 соединяется со связкой t2+t3+t5. Мне кажется, что в генераторе ошибка, здесь должно быть:
Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
  left join table2 as t2 ON t1.id=t2.id
  left join table3 as t3 ON t2.id=t3.id
  left join table5 as t5 ON t1.id=t5.id
  left join table4 as t4 on t4.id=t2.idS
Только вот будет ли результат одинаковый - что-то с ходу не могу сообразить.
4 дек 15, 17:32    [18515331]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Serg_77m
В том месте, где присоединяется table5, в условии ON она не упоминается.
Упс! Я и не заметил.
ЕМНИП, t1 в первом случае серверу должна быть не видна. Это ошибка.
Будет время - накидаю себе примерчик и удостоверюсь.
Правильно, видимо, так:
Select t1.a, t2.b, t3.c, t4.d,t5.e from
table1 as t1
left join
 table2 as t2
 left join table3 as t3 ON t2.id=t3.id
 left join table5 as t5 ON t5.id=t2.id
ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS
А если без вложенности, то
Select t1.a, t2.b, t3.c, t4.d,t5.e from
table2 as t2
left join table3 as t3 ON t2.id=t3.id
left join table5 as t5 ON t2.id=t5.id
right join table1 as t1 ON t1.id=t5.id
left join table4 as t4 on t4.id=t2.idS
4 дек 15, 17:54    [18515449]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
Serg_77m,

я же писал - объединение с группой объединений.

таблица1 + (таблица2+таблица3 по условию) по условию
4 дек 15, 17:55    [18515459]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Select t1.a, t2.b, t3.c, t4.d,t5.e
 from [color=red] [[/color][color=green]{[/color]table1 as t1
             [color=yellow]([/color]left join  table2 as t2
                  left join table3 as t3  ON t2.id=t3.id[color=yellow])[/color]
                     left join table5 as t5
          ON t1.id=t2.id[color=green]}[/color]
                     ON t1.id=t5.id[color=red]][/color]
             left join table4 as t4 on t4.id=t2.idS
4 дек 15, 18:31    [18515601]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику Join Join ON ON  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
предварительный просмотр рулит, чиерт подбери
4 дек 15, 18:32    [18515604]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить