自己結合の使用

自己結合を使用すると、テーブルをそのテーブル自体に結合できます。テーブルのレコードを同じテーブルの別のレコードと結合する結果セットを作成する場合は、自己結合を使用します。同じクエリで特定のテーブルを 2 回使用して一覧を作成する場合は、そのテーブル名のインスタンスの少なくとも 1 つにテーブルの別名を指定する必要があります。このテーブルの別名によって、テーブルの右バージョンと左バージョンのどちらのデータを列に表示するかをクエリ プロセッサが決定できるようになります。

A. 自己結合を使用して、複数のベンダーから提供されている製品を検索する

次の例では、自己結合を使用して、複数のベンダーから提供されている製品を検索します。

次のクエリでは、ProductVendor テーブルの自己結合を使用しているため、ProductVendor テーブルは 2 つのロールで使用されることになります。これらのロールを区別するために、FROM 句では、ProductVendor テーブルに 2 つの異なる別名 (pv1 および pv2) を指定します。これらの別名は、このクエリの後続の部分で列名を修飾する際に使用します。次に、自己結合の Transact-SQL ステートメントの例を示します。

USE AdventureWorks2008R2;
GO
SELECT DISTINCT pv1.ProductID, pv1.VendorID
FROM Purchasing.ProductVendor pv1
    INNER JOIN Purchasing.ProductVendor pv2
    ON pv1.ProductID = pv2.ProductID
        AND pv1.VendorID <> pv2.VendorID
ORDER BY pv1.ProductID

B. 自己結合を使用して、販売員とその区域を照合する

次の例では、Sales.SalesPerson テーブルの自己結合を実行して、すべての区域とその区域で勤務する販売員の一覧を作成します。

SELECT st.Name AS TerritoryName, sp.BusinessEntityID, 
    sp.SalesQuota, sp.SalesYTD
FROM Sales.SalesPerson AS sp
    JOIN Sales.SalesTerritory AS st
        ON sp.TerritoryID = st.TerritoryID
ORDER BY st.Name, sp.BusinessEntityID