使用自我聯結

在自我聯結中,資料表可以與本身聯結。當您想要建立結果集,以便聯結某份資料表中的記錄與相同資料表中的其他記錄時,請使用自我聯結。若要在相同的查詢中列出某份資料表兩次,您至少必須針對單一資料表名稱的執行個體提供資料表別名。這個資料表別名會協助查詢處理器判斷資料行應該呈現右側或左側資料表版本的資料。

範例

A. 使用自我聯結來尋找多家廠商所提供的產品

下列範例會使用自我聯結來尋找多家廠商所提供的產品。

因為此查詢牽涉到 ProductVendor 資料表與本身的聯結,ProductVendor 資料表將顯示成兩個角色。為了區分這兩個角色,您必須在 FROM 子句中賦予 ProductVendor 資料表兩個不同的別名 (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