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

Откуда:
Сообщений: 356
Здравствуйте
ситуация: есть три таблицы, две связаны один к одному tab1.vcode=tab2.pcode (назовоём получившуюся таблицу supertab)
В tab1 есть дата создания tab1.datecreate
к ним нужно пришпондорить третью nomenclator, в которой есть поле caption
Cвязь с nomenclator и tab2 - nomenclator.nomen=tab2.nomen
и причем для строки из nomenclator может не существовать строки из supertab
Задача:для всех не нулевых nomenclator.caption вывести дату создания
Потуги:
В принципе не сложно сделать двойной лефт джоин типа:
select  nom.caption ,t1.datecreate ,t2.nomen 
      from nomenclator nom
      left join tab2 t2 on nom.nomen=t2.nomen
      left join tab1 t1 on t1.vcode=t2.pcode
   where nom.caption is not null

но будет ли верный и такой вариант? т.е. не отсекутся ли строки?
select  nom.caption ,t1.datecreate ,t2.nomen 
      from tab1 t1
      join tab2 t2 on t1.vcode=t2.pcode
      right join nomenclator nom on nom.nomen=t2.nomen
   where nom.caption is not null

Хотелось бы использовать меньше left, т.к. они выполняются медленнее чем inner'ы
21 апр 14, 14:44    [15911065]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А вдруг right ещё медленнее, чем left ?
21 апр 14, 14:50    [15911107]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
Так?
SELECT
 nom.caption
,t1.datecreate
,t2.nomen 
FROM nomenclator nom
LEFT JOIN
      tab2 t2
 JOIN tab1 t1 ON t1.vcode=t2.pcode
ON nom.nomen=t2.nomen
WHERE nom.caption IS NOT NULL;
21 апр 14, 14:51    [15911117]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
tpg
А вдруг right ещё медленнее, чем left ?

в книжке вроде как пишут, что right то же самое что и left, только в другую сторону
http://job-blog.bullgare.ru/tag/left-join/
21 апр 14, 14:53    [15911133]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
Так?
SELECT
 nom.caption
,t1.datecreate
,t2.nomen 
FROM nomenclator nom
LEFT JOIN
      tab2 t2
 JOIN tab1 t1 ON t1.vcode=t2.pcode
ON nom.nomen=t2.nomen
WHERE nom.caption IS NOT NULL;

Вот самое интересное-то, что когда я так написал, он у меня оработал взде как inner, хоть там и стоит left, вот хочется знатоков послушать, как вязать подобные штуки?
21 апр 14, 14:55    [15911141]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
он у меня оработал взде как inner, хоть там и стоит left,

По вашему, какой результат будет у выражения 2+2*2 ?
А у (2+2)*2 ?
21 апр 14, 14:58    [15911160]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
он у меня оработал взде как inner, хоть там и стоит left,

По вашему, какой результат будет у выражения 2+2*2 ?
А у (2+2)*2 ?

первый 6-ть
второй 8-мь
конец дня, моск устал, не пойму к чему вы клоните? скажите прямо пожалуйста
21 апр 14, 14:59    [15911167]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8492
автор
он у меня оработал взде как inner, хоть там и стоит left


Не может быть. Вероятно, Вы перепутали очередность объединения.
21 апр 14, 14:59    [15911169]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Владислав Колосов,

так значит второй вариант с right правильно? и в так и нужно писать?
21 апр 14, 15:01    [15911182]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
конец дня, моск устал, не пойму к чему вы клоните? скажите прямо пожалуйста

Кто тому, что порядок выполнения соединений вовсе не строго слева направо
21 апр 14, 15:02    [15911195]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8492
R-Magistr
Владислав Колосов,

так значит второй вариант с right правильно? и в так и нужно писать?


Правильны оба варианта, Ваш и процитированный :)
21 апр 14, 15:03    [15911206]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
конец дня, моск устал, не пойму к чему вы клоните? скажите прямо пожалуйста

Кто тому, что порядок выполнения соединений вовсе не строго слева направо


что-то я совсем запутался, не строго не слева на право, порядок...
как именно нужно писать-то?
21 апр 14, 15:07    [15911233]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
R-Magistr
iap
Так?
SELECT
 nom.caption
,t1.datecreate
,t2.nomen 
FROM nomenclator nom
LEFT JOIN
      tab2 t2
 JOIN tab1 t1 ON t1.vcode=t2.pcode
ON nom.nomen=t2.nomen
WHERE nom.caption IS NOT NULL;


Вот самое интересное-то, что когда я так написал, он у меня оработал взде как inner, хоть там и стоит left, вот хочется знатоков послушать, как вязать подобные штуки?
Каждый JOIN соответствует ближайшему к нему "свободному" ON справа.
Сначала выполняются самые внутренние JOIN...ON,
более внешние - потом.
Очень похоже на скобки
(кстати, их можно расставить, но серверу они не нужны, он их проигнорирует).
21 апр 14, 15:09    [15911248]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
как именно нужно писать-то?

Нужно прочитать
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6
и задать корректно вопрос
21 апр 14, 15:09    [15911250]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
iap
Каждый JOIN соответствует ближайшему к нему "свободному" ON справа.
Сначала выполняются самые внутренние JOIN...ON,
более внешние - потом.
Очень похоже на скобки
(кстати, их можно расставить, но серверу они не нужны, он их проигнорирует).
Надо ещё заметить, что JOIN...ON на одном уровне вложенности выполняются слева направо.
21 апр 14, 15:10    [15911262]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
R-Magistr
пропущено...

Вот самое интересное-то, что когда я так написал, он у меня оработал взде как inner, хоть там и стоит left, вот хочется знатоков послушать, как вязать подобные штуки?
Каждый JOIN соответствует ближайшему к нему "свободному" ON справа.
Сначала выполняются самые внутренние JOIN...ON,
более внешние - потом.
Очень похоже на скобки
(кстати, их можно расставить, но серверу они не нужны, он их проигнорирует).

понял, следовательно вариант с right правильный, спасибо большое )))))
21 апр 14, 15:10    [15911264]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
iap
Каждый JOIN соответствует ближайшему к нему "свободному" ON справа.
Сначала выполняются самые внутренние JOIN...ON,
более внешние - потом.
Очень похоже на скобки
(кстати, их можно расставить, но серверу они не нужны, он их проигнорирует).
Надо ещё заметить, что JOIN...ON на одном уровне вложенности выполняются слева направо.

скажите пожалуйста, а изменится ли способ соединения и результат, если поменять местами:
nom.nomen=t2.nomen

на
t2.nomen=nom.nomen
21 апр 14, 15:16    [15911304]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
R-Magistr,

результат-то с чего поменяется?
21 апр 14, 15:20    [15911331]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
как именно нужно писать-то?

Нужно прочитать
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6
и задать корректно вопрос

Обычно я так и пишу в своих темах - Вопрос: - и задаю его
Но тут оно как-то так получилось, тем не менее вопрос звучал - Хотелось бы использовать меньше left, т.к. они выполняются медленнее чем inner'ы
21 апр 14, 15:21    [15911337]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
R-Magistr,

результат-то с чего поменяется?


Я ХЗ )))) мало ли )))) боюсь тут сижу всего ))))) вроде читать читал, а на практике прикольнее выходит ))))) Если не поменяется, так и скажите пожалуйста, яж ведь потому и спрашиваю, что не знаю ))))
21 апр 14, 15:22    [15911348]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
R-Magistr
Glory
пропущено...

Нужно прочитать
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6
и задать корректно вопрос

Обычно я так и пишу в своих темах - Вопрос: - и задаю его
Но тут оно как-то так получилось, тем не менее вопрос звучал - Хотелось бы использовать меньше left, т.к. они выполняются медленнее чем inner'ы
Это звучит примерно как "хотелось бы меньше использовать молоток (а больше - отвертку), потому что молоток тяжелый".
21 апр 14, 15:24    [15911365]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
Обычно я так и пишу в своих темах - Вопрос: - и задаю его

А надо выполнить п.4 и п.6

R-Magistr

Т.е. конечный результат неинтересен ? Главное, чтобы было поменьше left join-ов ?

R-Magistr
т.к. они выполняются медленнее чем inner'ы

Медленно выполняются не join-ы, а конкретные запросы
21 апр 14, 15:25    [15911369]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Гавриленко Сергей Алексеевич
R-Magistr
пропущено...

Обычно я так и пишу в своих темах - Вопрос: - и задаю его
Но тут оно как-то так получилось, тем не менее вопрос звучал - Хотелось бы использовать меньше left, т.к. они выполняются медленнее чем inner'ы
Это звучит примерно как "хотелось бы меньше использовать молоток (а больше - отвертку), потому что молоток тяжелый".

Я понял, исправлюсь )))
21 апр 14, 15:26    [15911377]     Ответить | Цитировать Сообщить модератору
 Re: left join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
Обычно я так и пишу в своих темах - Вопрос: - и задаю его

А надо выполнить п.4 и п.6

R-Magistr

Т.е. конечный результат неинтересен ? Главное, чтобы было поменьше left join-ов ?

R-Magistr
т.к. они выполняются медленнее чем inner'ы

Медленно выполняются не join-ы, а конкретные запросы


Я понял, спасибо большое за помощь и разъяснения
21 апр 14, 15:28    [15911399]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить