列 (ベータ、デルタ、ガンマ) を持つテーブル B にリンクされている列 (アルファ、ベータ) を持つテーブル A があるとします。最初のクエリがクロス結合に変換される理由を説明できません。(A.Alpha、A.Beta、および B.Delta は一意のキーです。B.Beta は A.Beta を参照します)。
次のように選択すると:
SELECT A.Alpha, B_Alias.Gamma FROM A
LEFT JOIN B as B_Alias ON B_Alias.Delta = (
SELECT TOP 1 B_Alias.Delta FROM B
WHERE B.Beta = B_Alias.Beta
ORDER BY B.Gamma desc)
where A.Alpha = 1
結果は多くの行になり、A.Alpha は常に選択された単一の行と等しくなり、B_Alias.Gamma にはすべてのガンマが含まれます。を取り出すA.Alpha = 1
と、完全交差結合になります。クエリの作成者による試みは、A に関連付けられている最新の B 列 (存在する場合) を取得することでした。次を使用して動作するように修正しました。上記がそのように機能する理由を誰かが説明できるかどうか疑問に思っていました。
-- This is the correct query
SELECT A.Alpha, B_Alias.Gamma FROM A
-- Actually join the A and B tables
LEFT JOIN B on B.Beta = A.Beta and B.Delta = (
-- Only get the Most Recent B for any given A
SELECT TOP 1 B.Delta FROM B
WHERE B.Beta = A.Beta
ORDER BY B.Gamma desc)
where A.Alpha = 1