2つの左結合を使用するか、1つの左結合とANDを使用しますか?


7

2つLEFT JOINのie を使用する

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>

これANDはシングルで使用するのと同じLEFT JOINですか?すなわち

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>

両方が同じか、または一般的に異なりますか?


それはあなたの要件とオン状態に依存します。Table2とt1.col1.t3.col1でt1.col1 = t2.col1を指定した場合も同じです。

2
ANDの代わりにORを使用した場合、2番目のクエリは最初のクエリに近い結果になりますが、それでも一般的には別のクエリなります。
Andriy M

Explainプランを使用して、違いを確認してください:)
Arnab Datta

@RajeshRanjanいいえ、その場合でも同等ではありません。
ypercubeᵀᴹ

回答:


13

彼らは違う。最初のオプションではTable2、クエリに2回アクセスします。一度t2と一度t3。どちらも内容が異なるため、どうにかして元に戻す必要があります。私にとって、これはANDではなくORです。2番目のオプションでは、両方の条件を満たす行のみを取得します。Table2

Table2次のコンテンツがあるとします。

| Color | Size |
|-------|------|
| Red   |  S   |
| Blue  |  S   |
| Blue  |  XS  |

あなたが行を持っているしたいとしBlueS。最初のオプションではすべての行を取得し(t2たとえば、all Blueおよびt3allを使用S)、2番目のオプションでは行2のみを取得します。


4
それだけでなく、これはテーブルを2回外部結合することに関するものであるため、最初のクエリでミニデカルト積も取得します。私は、意味Table1最初の結合、それを2個の与える行がカラー青とサイズS.そうしたい、Table2従って複製、一致するTable1行を、第二は、このように合計4列に得られた、コピーのそれぞれのための2つのマッチを与える加わります。
Andriy M
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.