|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Для начала: результат JOIN это вьюха? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 12:35 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Что Вы подразумеваете под термином "вьюха"? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 12:36 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Результат работы JOIN. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 12:42 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
донМахитоРезультат работы JOIN.У join нет результата так как он сам по себе ничего не значит. Результат есть у запроса. Который может быть с Join'ом. Но смысл и тип результат от этого не меняется. В любом случае это набор записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 12:45 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
донМахито, Нет. Результат join'а это множество данных удовлетворяющее условиям соединения джоина. А View это предопределенный запрос, который может содержать соединения(join) с другими таблицами, который сохраняется SQL сервером постоянно с момента создания в оптимизированном состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 12:49 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Тогда я не корректно понимаю JOIN, когда к одной таблице цепляются сразу несколько таблиц. Например: Autosaloon (id)---(pid)Garage(id)--(pid)Marka | (pid)Device Прежде, чем присоединить Garage к Autosaloon, нужно присоединить Device к Garage. Тогда Autosaloon будет соединен с результирующим значением (набором записей) Garage и Device, которое будет называться Garage. Затем соединяем Marka с Garage. Результат соединения Device и Garage -- нечто вроде вьюхи с названием Garage. Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:08 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:10 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Куда выводить результат SELECTа зависит от того что ты в INTO укажешь. Тут почитай PS. JOIN тут никакой роли не играет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:19 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Ладно, а сама логика верная? автор Прежде, чем присоединить Garage к Autosaloon, нужно присоединить Device к Garage. Тогда Autosaloon будет соединен с результирующим значением (набором записей) Garage и Device, которое будет называться Garage . Затем соединяем Marka с Garage . Просто далее есть задача к Garage еще несколько "веток" присоединить. Хотел бы сначала узнать, правильно ли мыслю. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:30 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
В такой ситуации: Код: plaintext 1. 2. 3. 4.
1. соединяем Autosaloon с результатом соединения Garage, Device и Service. 2. Сначала соединяем Garage с Device, затем полученный результат с Service. Либо cначала Garage с Service, а затем полученный результат с Device. 3. Соединяем полученный результат с Marka. Так? з.ы. реальной задачи пока нет, так что разбор на пальцах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:58 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Device и Service опять сместились под марку. Они цепляются к Garage ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 13:59 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
донМахито, Вы там что, в дизайнере запросов что ли колдуете? Цепочка связанных джойном таблиц НЕ зависит от порядка их перечисления. Она зависит от условий после слова ON. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 14:05 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
ВладимирМ, нужного не нашел. Вопрос темы: я не понимаю, как строится JOIN, когда к одной таблице есть несколько привязок. Autosaloon (id)---(pid)Garage(id)--(pid)Marka к Garage цепляются еще 2 цепочки: (pid)Device и (pid)Service Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 13:14 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
> Автор: донМахито > Вопрос темы: я не понимаю, как строится JOIN, когда к одной таблице есть несколько привязок. > Autosaloon (id)---(pid)Garage(id)--(pid)Marka > к Garage цепляются еще 2 цепочки: (pid)Device и (pid)Service Код: plaintext 1. 2. 3. 4.
Идет просмотр на предмет поиска первого предложения ON (ON Device.pid=Garage.id) для этого ON определяется тип соединения(в данном случае LEFT), дальше делается левое соединение этих таблиц. результат как-бы становится вместо таблицы Garage. Снова ищется предикат ON (ON Garage.pid=Autosaloon.id) и для него определяется тип соединения( тоже LEFT ). После чего производится соединение Autosaloon и результата предыдущего соединения и в данном примере это и будет конечный результат. А в общем случае, этот результат "запоминается" и снова ищется предикат ON, определяется тип соединения и производится соединение. И так пока не закончатся все предикаты ON. > Дальше не понимаю. Вроде с автосалоном связывается не сам гараж, а гараж + Device и Service (поэтому сначала к гаражу > делаем left join Device on Device.pid=Garage.id), а как прицепить Service? Ну так и цепляй их там: Код: plaintext 1. 2. 3. 4.
прилефтджоинен этот список Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 13:45 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Игорь Горбонос Ну так и цепляй их там: Код: plaintext 1. 2. 3. 4.
прилефтджоинен этот список Аааа, теперь понял, что имел ввиду проходящий, когда сказал по поводу ON. Я то думал, такая конструкция -- это типа "параллельное" подцепление. А сначала Device цепляется к Garage и только затем Service цепляется к Garage, точнее уже к результату Garage + Device.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 14:26 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
донМахитоВладимирМ, нужного не нашел. Вопрос темы: я не понимаю, как строится JOIN, когда к одной таблице есть несколько привязок. Вам уже сказали, что для Select нет такого понятия как "привязка". Ну, совсем утрируя: Сканируются ВСЕ записи во ВСЕХ таблицах. Паралельно (или одновременно, как понятнее) Дальше проверяются условия объединения ON и WHERE для КАЖДОЙ записи. LEFT - это уже "довесок" к результату подобного сравнения. Или, лучше сказать, уточнение, условий объединения Т.е. просто не существует такого понятия как "последовательность сцепки". Ваше предположение, что сначала к одной таблице "цепляется" другая, а потом к результату этой сцепки цепляется третья - в корне не верно. Все таблицы "сцепляются" одновременно . Если Вы поменяете местами строки с LEFT по разным таблицам - результат никак не изменится. Результат изменится, если Вы поменяете условия объединения в ON или WHERE. Я же не случайно сравнил процесс выборки с вложенными циклами, сканирующими ВСЕ записи во ВСЕХ таблицах. Так какая разница, по какой таблице пойдет внешний цикл, а по какой - внутренний, если в результате все равно будут просканированы вообще ВСЕ записи во ВСЕХ таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 14:34 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Хотя, то, что описал Игорь, как образ для лучшего понимания процесса - тоже справедливо. Так проще себе представить происходящее: сцепили первую таблицу со второй, потом к результату сцепки добавили третью, и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 14:40 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
ВладимирМВсе таблицы "сцепляются" одновременно . Получается все эти хитроотступные извороты не нужны? Можно просто делать left join on за left join on и все? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 15:01 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
> Автор: донМахито > Получается все эти хитроотступные извороты не нужны? Хитроотступные извороты нужны тебе самому и тому товарищу, который придет сопровождать этот код. Для лучшего понимания > Можно просто делать left join on за left join on и все? Нет! при левых/правых соединениях нужно обращать внимание на порядок указания таблиц. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 15:15 |
|
Общий вопрос по работе JOIN
|
|||
---|---|---|---|
#18+
Игорь Горбонос Хитроотступные извороты нужны тебе самому и тому товарищу, который придет сопровождать этот код. Для лучшего понимания понятно Игорь Горбонос Нет! при левых/правых соединениях нужно обращать внимание на порядок указания таблиц. [ Спасибо за пример. Как раз из-за порядка и волнуюсь. Всегда начинаю с "главной" для селекта таблицы, как здесь. С ней соединяю все остальные. Или в джоинах это единственный "порядок": главная таблица всегда первая, т.е. соединения начинаются с нее, а уже дальнейший порядок соединений не имеет значение? з.ы. нашел пример, 9 таблиц. пишу селект. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 15:54 |
|
|
start [/forum/topic.php?fid=41&fpage=99&tid=1585342]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
others: | 339ms |
total: | 491ms |
0 / 0 |