2016-05-15 11 views
0

私は3つの結合でSQLクエリを書いています。どの順序でmysqlでジョインが実行されますか?

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

私の要件は、私が作っTABLE1のすべてのエントリは、左の表2に参加したいということです。その後、私はテーブル3と内部結合したい。そうで教えてください左から右または左

一般に

答えて

1

に右に実行されますどのようなSQLクエリを注文した、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になり、2番目のonはそれらをフィルタリングします。

通常、left joinを使用するクエリでは、最初の後のjoinはすべてleft joinです。だから、おそらく意図し:これは、他の2つの表に関係なく、試合のtable1内のすべての行を保持します

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

関連する問題