2016-05-15 3 views
0

Я написал sql-запрос с тремя соединениями.В каком порядке соединение выполняется в mysql?

select *from table1 
LEFT JOIN table2 TTS on table1.field1= table2.field2 
INNER JOIN table3 on table1.field3 = table2.field4 

Мое требование состоит в том, что я хочу, чтобы все записи таблицы 1 были сделаны так, чтобы левое соединение с таблицей2. После этого я хочу, чтобы Inner присоединился к table3. Поэтому, пожалуйста, скажите, что быть в каком порядке SQL-запрос будет выполняться слева направо или справа налево

ответ

1

В общем, join s являются логически осуществляется в порядке, они написаны (если скобки не изменить порядок). Итак, как написано, ваши объединения логически реализованы так, как вы планируете.

Способ, которым фактически выполняется запрос, оставлен механизму выполнения.

Кроме того, ваш запрос эквивалентен:

select . . . 
from table1 INNER JOIN 
     table2 TTS 
     on table1.field1 = table2.field2 INNER JOIN 
     table3 
     on table1.field3 = table2.field4 ; 

Почему? LEFT JOIN может создавать строки от table1, которые не имеют совпадений в table2. field4 будет NULL в этих строках, а второй on отфильтровывает их.

Как правило, в запросах, которые используют left join, все join s после первых left join. Таким образом, вы, вероятно, намерены:

select . . . 
from table1 LEFT JOIN 
     table2 TTS 
     on table1.field1 = table2.field2 LEFT JOIN 
     table3 
     on table1.field3 = table2.field4 ; 

Это будет держать все строки в table1 независимо от матчей в двух других таблиц.

Смежные вопросы