1

同様の問題を探しましたが、役に立ちませんでした。解決策を見逃した場合は、お詫びし、正しい方向に向けてください。

MS AdventureWorks で遊んでいますが、作成した INNER JOIN を使用する 2 つの SELECT ステートメントに機能上の違いがあるかどうかを知りたいです。同じ結果が得られます。

バージョン 1

SELECT  pp.BusinessEntityID, pp.FirstName, pp.MiddleName, pp.LastName, pp.Suffix, 
    pe.EmailAddress, 
    pa.AddressLine1, pa.AddressLine2, pa.City, pa.PostalCode FROM 
Person.BusinessEntityAddress AS bea 
INNER JOIN  Person.Address AS pa 
    ON bea.AddressID = pa.AddressID 
INNER JOIN  Person.Person AS pp 
    ON bea.BusinessEntityID = pp.BusinessEntityID   
INNER JOIN  Person.EmailAddress AS pe 
    ON pp.BusinessEntityID = pe.BusinessEntityID 
WHERE pp.Suffix IS NOT NULL

バージョン 2

SELECT      pp.BusinessEntityID, pp.FirstName, pp.MiddleName, pp.LastName, pp.Suffix,
        pe.EmailAddress,
        pa.AddressLine1, pa.AddressLine2, pa.City, pa.PostalCode 
FROM        Person.BusinessEntityAddress AS bea 
        INNER JOIN Person.Address AS pa 
            ON bea.AddressID = pa.AddressID 
        INNER JOIN Person.Person AS pp 
            ON bea.BusinessEntityID = pp.BusinessEntityID
        INNER JOIN Person.EmailAddress AS pe 
            ON bea.BusinessEntityID = pe.BusinessEntityID 
WHERE     pp.Suffix IS NOT NULL

唯一の違いは、最後の ON 句にあります。設計図はかなり異なって見えますが、どんな考えでも大歓迎です

4

1 に答える 1

3

平等は推移的であるため、ここでは違いはありません。(*)

ただし、どこかに OUTER JOINS が混在していると、結果が異なる可能性があります。

(*) ただし、クエリ プランナーは最適なオプションを選択するほど賢くなく、別の言い方をすることで、いずれかの方法で強制される可能性があるため、両方の実行プランを調べます。冗長な 3 番目の等式を投入することもできます。それらはすべて同じ結果に到達しますが、結合が実行される順序によって、実行時間が大幅に異なる可能性があります。

于 2013-01-25T12:06:35.923 に答える