|
|
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть таблицы Т1, Т2, Т3. Т1 с Т2 связана не жестко, Т2 с Т3 жестко. Покажет ли все значения Т1, если в Т3 нет значения? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:32:37 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Напрмер, Т1 - план прибытия автомобилей Т2 - таблица многие-ко-многим "Водители автомобилей" Т3 - таблица Водители, Т4 - автомобили. Так что Т2 с Т3 и Т4 требуется связать жестко, т.к. не бывает Т2 без Т3 и Т4. А Т1 с Т2 не жестко, т.к. в плане можгут еще не назначить транспорт. Или в этом случае надо связывать ВСЕ таблицы не жестко, чтобы отобразились все значения Т1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:36:04 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Нужно показать все значения Т1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:37:09 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
5 минут потрачено на написание сообщений... хотя достаточно было 2 минут, чтобы попробовать и получить ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:39:38 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladЗдравствуйте! Есть таблицы Т1, Т2, Т3. Т1 с Т2 связана не жестко, Т2 с Т3 жестко. Покажет ли все значения Т1, если в Т3 нет значения? Код: sql 1. 2. 3. Нет. Покажет только Т1, которые есть и в Т3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:42:52 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvlad, используй вложенность при написании джойнов: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:45:19 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladНужно показать все значения Т1. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:45:20 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladЗдравствуйте! Есть таблицы Т1, Т2, Т3. Т1 с Т2 связана не жестко, Т2 с Т3 жестко. Покажет ли все значения Т1, если в Т3 нет значения? Код: sql 1. 2. 3. Сори, неверно прочитал пост. Такое пишется Код: sql 1. 2. 3. либо просто делаешь Код: sql 1. 2. 3. потому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id. Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 13:49:13 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivпотому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id. Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками. Допустим такая ситуация: В Т1 есть строка, но ссылка на Т2 в ней пустая. Не пропадет ли из выдачи данная строка по причине жесткой связи 2 и 3? P.S. 2 и 3 всегда связаны, null-ов там не может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 16:54:30 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladMasterZivпотому что по данным у тебя может не быть записи в t2 только по причине несоблюдения условия t2.t1_id = t1.id. Если же может когда-то несоблюдаться и t3.t2_id = t2.id , то надо писать со скобками. Допустим такая ситуация: В Т1 есть строка, но ссылка на Т2 в ней пустая. Не пропадет ли из выдачи данная строка по причине жесткой связи 2 и 3? P.S. 2 и 3 всегда связаны, null-ов там не может быть. Ещё раз. Вариант (1) Код: plaintext Вариант (2) Код: plaintext -- записи из T1 будут всегда. Тебе нужно только определиться, когда должны появляться записи из T2. всегда когда они есть, но соотв. записи из T3 - только если они есть. (вариант (2) ) только когда записи есть одновременно и в T2, и в T3 (вариант (1) ) Но если ты говоришь, что T2 и T3 всегда имеют связанные записи, то разницы, какой вариант использовать нет вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:22:53 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivЕщё раз. Вариант (1) Код: plaintext Вариант (2) Код: plaintext -- записи из 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:29:27 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladМожно ли сделать без скобок? Код: plaintext я же тебе показал вложенные джойны, без скобок.:Добрый Э - Эхsvnvlad, используй вложенность при написании джойнов: Код: sql 1. 2. 3. 4. 5. 6. чем-то не устроило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:39:01 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
возможно можно и без скобок, я не знаю уке в мускле, да и вообще не морочился никогда, либо все left , либо все inner. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:33:58 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivвозможно можно и без скобок, я не знаю уке в мускле, да и вообще не морочился никогда, либо все left , либо все inner.я смотрю, тут одни писатели собрались... уже два раза привел пример, как оно должно работать без скобок, на вложенных джойнах. а они всё сомневаются - возможно / невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:38:42 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх Код: sql 1. 2. 3. 4. 5. 6. Шайтан! И правда работает! http://sqlfiddle.com/#!2/2220e/1 Впервые вижу, что два ON последовательно работают. Но лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:59:39 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
miksoftНо лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше. LEFT JOIN-ы медленней работают, чем INNER JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 04:27:49 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхsvnvladМожно ли сделать без скобок? Код: plaintext я же тебе показал вложенные джойны, без скобок.:Добрый Э - Эхsvnvlad, используй вложенность при написании джойнов: Код: sql 1. 2. 3. 4. 5. 6. чем-то не устроило? Никогда не встречал такой формулировки. Не успел еще осознать. По сути должно быть так круче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 04:29:35 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
miksoft, как понимаю ТЕПЕРЬ работает. В 5.1. потребовало бы алиасы для каждой таблички, в т.ч. и для вложенного подзапроса ... вот тебе и скобки. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 06:06:45 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
Arhat109miksoft, как понимаю ТЕПЕРЬ работает. В 5.1. потребовало бы алиасы для каждой таблички, в т.ч. и для вложенного подзапроса ... вот тебе и скобки. :)в 5.1.61 работает, ничего не требует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 07:51:50 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
я вот одного не понял Т1 - план прибытия автомобилей - arrives T2 - car_drivers T3 - cars T4 - drivers. вот в упор не понимаю почему 4 таблицы. если за машиной закреплён водитель один, то Т2 ненужно если это некая компания, и на каждую поездку(одна запись в прибытие) делается связь водитель-машина, всёравно не понятно зачем Т2 а уж почему Т1 и Т2 связаны, совсем загадка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 08:46:31 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
miksoftДобрый Э - Эх Код: sql 1. 2. 3. 4. 5. 6. Шайтан! И правда работает! http://sqlfiddle.com/#!2/2220e/1 Впервые вижу, что два ON последовательно работают. Но лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше. Не, я лично не знал, что можно не ставить скобки. Ну да, там по синтаксису и так ясно, кто с кем JOIN-иться. Раньше не задумывался над этим тоже, потому что всегда пишу всё LEFT , если выше уже есть LEFT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 10:01:27 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
svnvladmiksoftНо лично я написал бы через два LEFT JOIN-а, потому как в объемных запросах слишком неожиданно встретить два ON подряд, особенно, когда их JOIN на экран выше. LEFT JOIN-ы медленней работают, чем INNER JOIN. Не только медленнее, но и вообще по-другому ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 10:02:17 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivНу да, там по синтаксису и так ясно, кто с кем JOIN-иться. Да, но наличие хотя бы одного LEFT сразу лишает сервер возможности изменить порядок сканирования/связывания таблиц. А в исходном запросе порядок связывания не соответствовал требуемой логике. Так что либо скобки, либо вложенные связывания, либо мой вариант с правым джойном. Ну или совсем отстойный вариант с подзапросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 10:19:21 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivНу да, там по синтаксису и так ясно, кто с кем JOIN-иться. Да, но наличие хотя бы одного LEFT сразу лишает сервер возможности изменить порядок сканирования/связывания таблиц. А в исходном запросе порядок связывания не соответствовал требуемой логике. Так что либо скобки, либо вложенные связывания, либо мой вариант с правым джойном. Ну или совсем отстойный вариант с подзапросом. ваше ничего не понял... ну да ладно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 10:20:58 |
|
||
|
Запрос с LEFT JOIN + INNER JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivРаньше не задумывался над этим тоже, потому что всегда пишу всё LEFT , если выше уже есть LEFT. Не понял... ты хочешь сказать, что тебе пофиг на то, какая должна быть заложена логика при получении результата? а ведь эта тема - яркий пример того, что бездумное использование LEFT JOIN может дать вовсе не тот результат, который требуется на самом деле. Пора тебе, наверное, пересматривать свой подход. А то ведь нарвёшься... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 10:40:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38872596&tid=1833576]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 351ms |

| 0 / 0 |
