11

いくつかの SQL コード:

SELECT *
FROM table1 tab1 
   LEFT OUTER JOIN table2 tab2 ON (tab1.fg = tab2.fg)
   LEFT OUTER JOIN table4 tab4 ON (tab1.ss = tab4.ss)
   INNER JOIN table3 tab3 ON (tab4.xya = tab3.xya)
   LEFT OUTER JOIN table5 tab5 ON (tab4.kk = tab5.kk)

さまざまな種類の JOIN が何を行うかは知っていますが、知りたいのは、JOIN ごとに、どのテーブルが「LEFT」テーブルの役割を担っているかということです。table1「LEFT」テーブルの役割は常にありますか?

4

1 に答える 1

16

それらは上から下の順序で処理され、結合はすべて前の FROM 句の「全体」に関連付けられます。

すべてが等しい:

  • tab1 は、オプションのパートナー tab2 を持つ OUTER JOIN の必須パートナーです。
  • 上記は、オプションのパートナー tab4 を使用した OUTER JOIN の必須パートナーです。
  • 上記と tab4 はどちらも INNER JOIN の必須のパートナーです
  • 上記は、オプションのパートナー tab5 を使用した OUTER JOIN の必須パートナーです。

ただし、このクエリの問題

SELECT *
FROM table1 tab1 
LEFT OUTER JOIN table2 tab2 ON tab1.fg = tab2.fg
LEFT OUTER JOIN table4 tab4 ON tab1.ss = tab4.ss
INNER JOIN table3 tab3 ON tab4.xya = tab3.xya
LEFT OUTER JOIN table5 tab5 ON tab4.kk = tab5.kk

table3 を使用した INNER JOIN は、関与するのに tab4 が必要であるという条件を使用し、左部分からのレコードを保持するために事実上必須のリンクになるため、合計で tab1/tab4/tab3 が正常に結合し、tab2 と tab5 はオプションです。

于 2012-10-10T11:44:06.597 に答える