powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с LEFT JOIN + INNER JOIN
42 сообщений из 42, показаны все 2 страниц
Запрос с LEFT JOIN + INNER JOIN
    #38872262
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Есть таблицы Т1, Т2, Т3.
Т1 с Т2 связана не жестко, Т2 с Т3 жестко.
Покажет ли все значения Т1, если в Т3 нет значения?
Код: sql
1.
2.
3.
SELECT * FROM t1
LEFT JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t3.t2_id = t2.id
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872266
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрмер, Т1 - план прибытия автомобилей
Т2 - таблица многие-ко-многим "Водители автомобилей"
Т3 - таблица Водители, Т4 - автомобили.

Так что Т2 с Т3 и Т4 требуется связать жестко, т.к. не бывает Т2 без Т3 и Т4.
А Т1 с Т2 не жестко, т.к. в плане можгут еще не назначить транспорт.

Или в этом случае надо связывать ВСЕ таблицы не жестко, чтобы отобразились все значения Т1?
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872267
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно показать все значения Т1.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872270
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 минут потрачено на написание сообщений... хотя достаточно было 2 минут, чтобы попробовать и получить ответ.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872272
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЗдравствуйте!
Есть таблицы Т1, Т2, Т3.
Т1 с Т2 связана не жестко, Т2 с Т3 жестко.
Покажет ли все значения Т1, если в Т3 нет значения?
Код: sql
1.
2.
3.
SELECT * FROM t1
LEFT JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t3.t2_id = t2.id



Нет. Покажет только Т1, которые есть и в Т3
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872275
svnvlad,

используй вложенность при написании джойнов:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
   ON t2.t1_id = t1.id
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872276
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladНужно показать все значения Т1.
Код: sql
1.
2.
3.
from t2
inner join t3
right join t1
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872280
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЗдравствуйте!
Есть таблицы Т1, Т2, Т3.
Т1 с Т2 связана не жестко, Т2 с Т3 жестко.
Покажет ли все значения Т1, если в Т3 нет значения?
Код: sql
1.
2.
3.
SELECT * FROM t1
LEFT JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t3.t2_id = t2.id



Сори, неверно прочитал пост.

Такое пишется

Код: sql
1.
2.
3.
SELECT * FROM t1
LEFT JOIN ( t2 INNER JOIN t3 ON t3.t2_id = t2.id )
ON t2.t1_id = t1.id



либо просто делаешь

Код: sql
1.
2.
3.
SELECT * FROM t1
LEFT JOIN t2 ON t2.t1_id = t1.id
LEFT JOIN t3 ON t3.t2_id = t2.id



потому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id.
Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872596
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivпотому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id.
Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками.
Допустим такая ситуация:
В Т1 есть строка, но ссылка на Т2 в ней пустая. Не пропадет ли из выдачи данная строка по причине жесткой связи 2 и 3?
P.S. 2 и 3 всегда связаны, null-ов там не может быть.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladMasterZivпотому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id.
Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками.
Допустим такая ситуация:
В Т1 есть строка, но ссылка на Т2 в ней пустая. Не пропадет ли из выдачи данная строка по причине жесткой связи 2 и 3?
P.S. 2 и 3 всегда связаны, null-ов там не может быть.

Ещё раз.

Вариант (1)
Код: plaintext
T1--left join--( T2 -- join -- T3 )
Запись из T1 не может вообще никогда пропасть, потому что T1--left join -- (ВСЁ_ЧТО_УГОДНО) -- записи из T1 будут всегда.


Вариант (2)
Код: plaintext
T1--left join-- T2 -- left join -- T3
Запись из T1 не может также никогда пропасть, потому что T1--left join -- (ВСЁ_ЧТО_УГОДНО) -- left join (ВСЁ_ЧТО_УГОДНО)
-- записи из T1 будут всегда.

Тебе нужно только определиться, когда должны появляться записи из T2.

всегда когда они есть, но соотв. записи из T3 - только если они есть. (вариант (2) )

только когда записи есть одновременно и в T2, и в T3 (вариант (1) )

Но если ты говоришь, что T2 и T3 всегда имеют связанные записи, то разницы, какой вариант использовать нет вообще.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872646
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕщё раз.

Вариант (1)
Код: plaintext
T1--left join--( T2 -- join -- T3 )
Запись из T1 не может вообще никогда пропасть, потому что T1--left join -- (ВСЁ_ЧТО_УГОДНО) -- записи из T1 будут всегда.


Вариант (2)
Код: plaintext
T1--left join-- T2 -- left join -- T3
Запись из T1 не может также никогда пропасть, потому что T1--left join -- (ВСЁ_ЧТО_УГОДНО) -- left join (ВСЁ_ЧТО_УГОДНО)
-- записи из T1 будут всегда.

Тебе нужно только определиться, когда должны появляться записи из T2.

всегда когда они есть, но соотв. записи из T3 - только если они есть. (вариант (2) )

только когда записи есть одновременно и в T2, и в T3 (вариант (1) )


Все записи из Т1, и, если есть, то записи из Т2--inner join--Т3.
T1a - null - null
T1b - null - null
T1c - T2a - T3а
T1d - T2b - T3b
T1e - null - null

Можно ли сделать без скобок?
Код: plaintext
T1--left join-- T2 -- inner join -- T3 
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872660
svnvladМожно ли сделать без скобок?
Код: plaintext
T1--left join-- T2 -- inner join -- T3 

я же тебе показал вложенные джойны, без скобок.:Добрый Э - Эхsvnvlad,

используй вложенность при написании джойнов:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
    ON t2.t1_id = t1.id


чем-то не устроило?
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872833
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно можно и без скобок, я не знаю уке в мускле, да и вообще не морочился никогда, либо все left , либо все inner.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872835
MasterZivвозможно можно и без скобок, я не знаю уке в мускле, да и вообще не морочился никогда, либо все left , либо все inner.я смотрю, тут одни писатели собрались... уже два раза привел пример, как оно должно работать без скобок, на вложенных джойнах. а они всё сомневаются - возможно / невозможно.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872845
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
   ON t2.t1_id = t1.id

Шайтан! И правда работает!
http://sqlfiddle.com/#!2/2220e/1
Впервые вижу, что два ON последовательно работают.

Но лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872948
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНо лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше.
LEFT JOIN-ы медленней работают, чем INNER JOIN.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872949
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхsvnvladМожно ли сделать без скобок?
Код: plaintext
T1--left join-- T2 -- inner join -- T3 

я же тебе показал вложенные джойны, без скобок.:Добрый Э - Эхsvnvlad,

используй вложенность при написании джойнов:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
    ON t2.t1_id = t1.id


чем-то не устроило?
Никогда не встречал такой формулировки. Не успел еще осознать. По сути должно быть так круче.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872960
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

как понимаю ТЕПЕРЬ работает. В 5.1. потребовало бы алиасы для каждой таблички, в т.ч. и для вложенного подзапроса ... вот тебе и скобки. :)
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872972
Arhat109miksoft,

как понимаю ТЕПЕРЬ работает. В 5.1. потребовало бы алиасы для каждой таблички, в т.ч. и для вложенного подзапроса ... вот тебе и скобки. :)в 5.1.61 работает, ничего не требует
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38872993
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот одного не понял

Т1 - план прибытия автомобилей - arrives
T2 - car_drivers
T3 - cars
T4 - drivers.

вот в упор не понимаю почему 4 таблицы.

если за машиной закреплён водитель один, то Т2 ненужно
если это некая компания, и на каждую поездку(одна запись в прибытие) делается связь водитель-машина, всёравно не понятно зачем Т2

а уж почему Т1 и Т2 связаны, совсем загадка.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873041
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДобрый Э - Эх
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
   ON t2.t1_id = t1.id

Шайтан! И правда работает!
http://sqlfiddle.com/#!2/2220e/1
Впервые вижу, что два ON последовательно работают.

Но лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше.


Не, я лично не знал, что можно не ставить скобки.
Ну да, там по синтаксису и так ясно, кто с кем JOIN-иться.
Раньше не задумывался над этим тоже, потому что всегда пишу всё LEFT , если выше уже есть LEFT.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873042
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladmiksoftНо лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше.
LEFT JOIN-ы медленней работают, чем INNER JOIN.

Не только медленнее, но и вообще по-другому ...
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873070
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу да, там по синтаксису и так ясно, кто с кем JOIN-иться.
Да, но наличие хотя бы одного LEFT сразу лишает сервер возможности изменить порядок сканирования/связывания таблиц. А в исходном запросе порядок связывания не соответствовал требуемой логике. Так что либо скобки, либо вложенные связывания, либо мой вариант с правым джойном. Ну или совсем отстойный вариант с подзапросом.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873074
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivНу да, там по синтаксису и так ясно, кто с кем JOIN-иться.
Да, но наличие хотя бы одного LEFT сразу лишает сервер возможности изменить порядок сканирования/связывания таблиц. А в исходном запросе порядок связывания не соответствовал требуемой логике. Так что либо скобки, либо вложенные связывания, либо мой вариант с правым джойном. Ну или совсем отстойный вариант с подзапросом.
ваше ничего не понял...
ну да ладно...
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873100
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivРаньше не задумывался над этим тоже, потому что всегда пишу всё LEFT , если выше уже есть LEFT.
Не понял... ты хочешь сказать, что тебе пофиг на то, какая должна быть заложена логика при получении результата? а ведь эта тема - яркий пример того, что бездумное использование LEFT JOIN может дать вовсе не тот результат, который требуется на самом деле.
Пора тебе, наверное, пересматривать свой подход. А то ведь нарвёшься...
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873284
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Не знаю какой стоял на той работе Мускуль, но точно из 5.1. ... года 4 назад. Не работало.

Это нормальная практика в MS ACCESS и я ей активно пользовался. Был удивлен что тут "так низзя". С тех пор больше не проверял. Щас стоит 5.5. и 5.6 ... не начем. :)
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873289
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladmiksoftНо лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше.
LEFT JOIN-ы медленней работают, чем INNER JOIN.Не совсем так. Если данные в таблицах дают одинаковый результат для LEFT JOIN и INNER JOIN и если направление соединения таблиц в INNER JOIN совпадает с направлением LEFT JOIN, то одинаково. (Что весьма вероятно в случае топикстартера). В остальных случаях, да, LEFT JOIN может быть медленнее, чем INNER JOIN.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873461
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvladпропущено...

LEFT JOIN-ы медленней работают, чем INNER JOIN.Не совсем так. Если данные в таблицах дают одинаковый результат для LEFT JOIN и INNER JOIN и если направление соединения таблиц в INNER JOIN совпадает с направлением LEFT JOIN, то одинаково. (Что весьма вероятно в случае топикстартера). В остальных случаях, да, LEFT JOIN может быть медленнее, чем INNER JOIN.

ДАЁШЬ ЗАПРЕТ LEFT JOIN ! Пора положить конец этому тормозу!
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873542
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю - какой прок от более быстрого запроса, если он даёт не то, что требуется?
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873844
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЯ не понимаю - какой прок от более быстрого запроса, если он даёт не то, что требуется?

Зато он быстрый!

Предлагаю вообще все запросы в БД заменять на

Код: sql
1.
 select 123, 42 ;



Будет мегасупербыстро!
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38873913
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivmiksoftпропущено...
Не совсем так. Если данные в таблицах дают одинаковый результат для LEFT JOIN и INNER JOIN и если направление соединения таблиц в INNER JOIN совпадает с направлением LEFT JOIN, то одинаково. (Что весьма вероятно в случае топикстартера). В остальных случаях, да, LEFT JOIN может быть медленнее, чем INNER JOIN.

ДАЁШЬ ЗАПРЕТ LEFT JOIN ! Пора положить конец этому тормозу!поддерживаю!

Тем более что FULL JOIN уже запрещен
видимо тоже по причине крайней тормознутости
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875299
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453я вот одного не понял

Т1 - план прибытия автомобилей - arrives
T2 - car_drivers
T3 - cars
T4 - drivers.

вот в упор не понимаю почему 4 таблицы.

если за машиной закреплён водитель один, то Т2 ненужно
если это некая компания, и на каждую поездку(одна запись в прибытие) делается связь водитель-машина, всёравно не понятно зачем Т2

а уж почему Т1 и Т2 связаны, совсем загадка.
За машиной закреплен водитель, но водитель может поменяться, так же как и пересесть на другую машину или уволиться. Связь многие-ко-многим. Но в основном один водитель закреплен за одной машиной. Т2 - чтобы выбирать сразу водитель-машина.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875300
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЯ не понимаю - какой прок от более быстрого запроса, если он даёт не то, что требуется?
В данном случае как раз дает. Зачем плодить лишние LEFT, если по логике там однозначное жесткое соответствие.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875307
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхsvnvladМожно ли сделать без скобок?
Код: plaintext
T1--left join-- T2 -- inner join -- T3 

я же тебе показал вложенные джойны, без скобок.:Добрый Э - Эхsvnvlad,

используй вложенность при написании джойнов:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
  FROM t1
    LEFT JOIN t2 
      INNER JOIN t3 
      ON t3.t2_id = t2.id
    ON t2.t1_id = t1.id


чем-то не устроило?
Кстати, заметил, что если внешний LEFT JOIN заменить на INNER JOIN, то сервер выдает ошибку.
И нигде нет информации о вложенных джойнах (по поиску в интернете).
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875314
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladКстати, заметил, что если внешний LEFT JOIN заменить на INNER JOIN, то сервер выдает ошибку.о которой мы должны догадаться?
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875407
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladзаметил, что если внешний LEFT JOIN заменить на INNER JOIN, то сервер выдает ошибку.
Это не потому, что запрос получается синтаксически неверным, а потому, что ты при замене ещё где-то накосорезил.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38875410
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladВ данном случае как раз дает.Запрос - это расчётное отражение бизнес-логики. При левом и при внутреннем связываниях логика - разная. И если два РАЗНЫХ запроса ВДРУГ один раз дают одинаковые выходные наборы - это не значит, что запрос верный. И не значит, что выходные наборы ВСЕГДА будут одинаковыми и, главное, верными.

Это всего лишь ещё одно подтверждение правила, что "есть категория граждан, которым везёт".
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38878250
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinasvnvladВ данном случае как раз дает.Запрос - это расчётное отражение бизнес-логики. При левом и при внутреннем связываниях логика - разная. И если два РАЗНЫХ запроса ВДРУГ один раз дают одинаковые выходные наборы - это не значит, что запрос верный. И не значит, что выходные наборы ВСЕГДА будут одинаковыми и, главное, верными.

Это всего лишь ещё одно подтверждение правила, что "есть категория граждан, которым везёт".
Я не понял, к чему вы придираетесь. Если вы про категорию граждан, то это не про меня, я понимаю отличие Inner от Left. Но в данном случае бизнес логика задает жесткую связь.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38878262
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinasvnvladзаметил, что если внешний LEFT JOIN заменить на INNER JOIN, то сервер выдает ошибку.
Это не потому, что запрос получается синтаксически неверным, а потому, что ты при замене ещё где-то накосорезил.
А вы попробуйте. Тот же самый запрос, но внешний JOIN вместо LEFT поставьте INNER. Уже встречал на просторах сети такую же жалобу.
Этот запрос выдает нормальный результат
Код: sql
1.
2.
3.
4.
5.
SELECT * FROM auto_card ac
  LEFT JOIN car_driver cd 
 	 INNER JOIN car c ON c.id = cd.car_id
  	 INNER JOIN driver d ON d.id = cd.driver_id
  ON cd.id = ac.car_driver_id 



А этот выдает ошибку
Код: sql
1.
2.
3.
4.
5.
SELECT * FROM auto_card ac
  INNER JOIN car_driver cd 
 	 INNER JOIN car c ON c.id = cd.car_id
  	 INNER JOIN driver d ON d.id = cd.driver_id
  ON cd.id = ac.car_driver_id 



MySQL ServerYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON cd.id = ac.car_driver_id' at line 5
(0,531 сек)
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38878455
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЭтот запрос выдает нормальный результат
svnvladА этот выдает ошибку
Используя недокументированные способности парсера, не надо сильно наглеть, полагая, что будут корректно обработаны любые возможные комбинации. Корректная обработка вложенных джойнов - конечно, фича, но ненадёжная. Вспомните введение приоритета джойна над запятой или позиционной зависимости разбора натуральных джойнов.
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38878508
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladalex564657498765453я вот одного не понял

Т1 - план прибытия автомобилей - arrives
T2 - car_drivers
T3 - cars
T4 - drivers.

вот в упор не понимаю почему 4 таблицы.

если за машиной закреплён водитель один, то Т2 ненужно
если это некая компания, и на каждую поездку(одна запись в прибытие) делается связь водитель-машина, всёравно не понятно зачем Т2

а уж почему Т1 и Т2 связаны, совсем загадка.
За машиной закреплен водитель, но водитель может поменяться, так же как и пересесть на другую машину или уволиться. Связь многие-ко-многим. Но в основном один водитель закреплен за одной машиной. Т2 - чтобы выбирать сразу водитель-машина.
А ведь бывают еще машины, за которыми закреплены экипажи... Из нескольких человек, не обязательно из двух...
И водители в этих экипажах тоже могут (теоретически) меняться друг с другом рейсами...
Впрочем, это все в ТЗ - есть/нет/пофиг
...
Рейтинг: 0 / 0
Запрос с LEFT JOIN + INNER JOIN
    #38879593
ArthurSU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453а уж почему Т1 и Т2 связаны, совсем загадка.
А как иначе определить какая машина приехала
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с LEFT JOIN + INNER JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]