サブ結合を使用すると、同じ結果を生成する2つの異なる方法に気づきました。サブ結合内では、「select」を使用して2つのテーブルを結合し、後続の行で参照されるエイリアスを指定します。もう1つは、2つのテーブルを「匿名で」結合するだけで、後続の行はサブ結合のテーブルエイリアス名を使用します。以下にサンプルコードがあります。私の質問は次のとおりです。
これらは同等であり、キーストロークを節約するだけですか?
'select'を使用する一方は一時テーブルを作成しますが、もう一方は作成しませんか?
2つの間にパフォーマンスの違いはありますか?実行アナライザーに基づくものはないと思いますが、お願いしたいと思いました。
1つまたは他の「サブジョインスタイル」の「名前」はありますか(たとえば、エイリアスサブジョインと匿名サブジョインの違いはありますか?)
テーブル名と列名のエイリアシングのスコープ規則に関する限り、このような状況を説明する可能性のある、誰かが私に指摘できる優れたドキュメントはありますか?検索しましたが、一致するものが見つかりません(「正しく」検索しているかどうかはわかりませんが)?
2つのクエリは次のとおりです。
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (select b2.*, bp2.product_id
from Bugs b2
JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id) AS sub1
ON (bp1.product_id = sub1.product_id AND (b1.date_reported < sub1.date_reported))
WHERE sub1.bug_id IS NULL;
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (Bugs b2 JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id)
ON (bp1.product_id = bp2.product_id AND (b1.date_reported < b2.date_reported))
WHERE b2.bug_id IS NULL;