|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Ecть некоторое количество связанных таблиц, связь -- друг за другом, получается как цепочка. Связал их через LEFT JOIN от самой первой (по ней же и отбор по ключу) до последней. Теперь нужно добавить еще одну таблицу, она связана с одной из таблиц в цепочке (с третьей по порядку). Структура: Табл1--Табл2--Табл3--Табл4--Табл5--Табл6--Табл7 | Таблx Возможно ли применить LEFT JOIN к такой структуре? На всякий случай псевдокод селект по всей цепочке (без Таблх): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2010, 11:27 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Форматирование сбилось -- Таблх привязана к Табл3. В последнем джоинте забыл 7 поставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2010, 11:29 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
А что, какие-то проблемы возникли? Какие? Вы не правильно понимаете смысл внешних объединений (LEFT, RIGHT, FULL). Эта штука работает как INNER JOIN, но кроме этого добавляет в выборку те записи, которым не нашлось соответствие в "присоединяемых" таблицах. И вообще, объединение таблиц не есть формальное "сложение". Это некая операция сопоставления http://forum.foxclub.ru/read.php?29,216597,216908#msg-216908 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2010, 16:07 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
ВладимирМ, Смысл LEFT JOIN понимаю: из левой таблицы выбрать даже те записи, которым нет соответствия по ключам в правой. Просто все примеры, которые видел были написаны "паровозиком": таблица цеплялась за таблицу и так цепочкой. А в моем случае к одному из звеньев добавляются еще таблицы -- типа побочное ответвление. Таких примеров LEFT JOIN я не видел, вот и интересуюсь, возможно ли такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 11:29 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито > А в моем случае к одному из звеньев добавляются еще таблицы -- типа побочное ответвление. Таких примеров LEFT > JOIN я не видел, вот и интересуюсь, возможно ли такое. Почему нет, можно :) Только сходу не придумаю пример, хотя вроде как проскакивали такие запросы. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 12:42 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
донМахитоСмысл LEFT JOIN понимаю: из левой таблицы выбрать даже те записи, которым нет соответствия по ключам в правой. Просто все примеры, которые видел были написаны "паровозиком": таблица цеплялась за таблицу и так цепочкой. А в моем случае к одному из звеньев добавляются еще таблицы -- типа побочное ответвление. Таких примеров LEFT JOIN я не видел, вот и интересуюсь, возможно ли такое. И что, за месяц, прошедший со дня создания темы не смог создать тестовый примерчик и попробовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 14:33 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Игорь Горбонос, зато у меня пример есть. Там правда побочкой только одна таблица цепляется. Как в запросе выглядеть будет? Чтобы не засорять -- псевдокод: Код: plaintext 1. 2. 3. 4.
ВладимирМ, Переключился на другую работу. Сейчас появилось свободное время -- вернулся к вопросу. Сейчас попробую -- не люблю тратить время, если не уверен, что правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 14:49 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито > Игорь Горбонос, > зато у меня пример есть. Там правда побочкой только одна таблица цепляется. Как в запросе выглядеть будет? > Чтобы не засорять -- псевдокод: Вот псевдокод это зря :) потому что в этом псевдокоде ты не указал самое главное: условия соединений! Именно по ним будет определятся наличие цепочки, а не по порядку написания джоинов. По порядку написания джоинов будет определятся очерёдность просмотра таблиц при выборке данных. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 15:33 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Игорь Горбонос, соединение по ключам pk--fk. Проверил. Запрос вроде выводит инфу, но там много инфы дополнительно , сейчас вспоминаю что к чему, чтобы проверить:) А то что-то результат подозрительный. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 16:22 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито > А то что-то результат подозрительный. Составь таблички на несколько строк и прогони запрос Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 16:30 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Непонятка: выводит инфу, которой не должно быть, при этом из "побочной" таблицы выводит .NULL., когда там все, что нужно заполнено. Цепочка: vidocbase--> unit_ref--> uMenuRBS--> uMenuRSP--> uMenuRFD--> uFood--> nobase К uMenuRBS цепляется еще одна таблица: uOtdel. Вот кусок с джоинами: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 16:33 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито А почему uOtdel цепляется через лефт джоин? И вообще, почему все таблицы через лефт джоин? Я бы написал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
такое тоже писал, но сейчас не могу найти точный синтаксис Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 17:10 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Игорь Горбонос, более опытный в sql товарищ посоветовал через него работать. А в фоксе оказывается скобками отделять надо. Теперь все корректно выводит. Спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 17:48 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито > более опытный в sql товарищ посоветовал через него работать. Лефт джоин применяется когда нужно получить все записи из левой таблицы и дополнить совпадающими записями из правой таблицы, т.е. когда в правой таблице может не быть совпадающих записей. Если ты уверен что в правой таблице всегда будут нужные данные, тогда лучше переписать на иннер. Как пример таблица с названиями отделов и таблица с отрудников Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В результате будут все работники и только два отдела, хотя если INNER JOIN заменить на LEFT OUTER JOIN то в результате будут все отделы, а на недостающем сотруднике будут нулы Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2010, 18:05 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
Игорь Горбонос, стараюсь начинать цепочку с той таблицы, которая участвует в условии. По идее так никаких неожиданностей не будет: в самой первой левой таблице получаем только те записи, которые отобрали в условии. Теперь другой вариант: таблица vidocbase в середине цепочки, т.е. и слева, и справа есть связанные с ней таблицы. Так взял, потому что как раз по ней идет условие. vidocbase (rn)---(master_rn)idocspec(rn_numcl)---(rn)nobase |(rn) | |(child_rn) unit_ref |(parent_rn) | |(rn) uMenuRBS Можно ли сделать JOIN? Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2010, 17:17 |
|
Как работает JOIN: таблицы цепляются друг за другом или не обязательно?
|
|||
---|---|---|---|
#18+
> Автор: донМахито не понял схему данных, сделай так напиши запрос, какой есть сейчас и допиши какую таблицу нужно приджоинить к какой и по каким полям связать. Вообще-то можно, но нужно смотреть где располагать левое соединение Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2010, 10:17 |
|
|
start [/forum/topic.php?fid=41&fpage=100&tid=1585393]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 131ms |
0 / 0 |