自己結合の使用
自己結合を使用すると、テーブルをそのテーブル自体に結合できます。テーブルのレコードを同じテーブルの別のレコードと結合する結果セットを作成する場合は、自己結合を使用します。同じクエリで特定のテーブルを 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