使用自我聯結
在自我聯結中,資料表可以與本身聯結。當您想要建立結果集,以便聯結某份資料表中的記錄與相同資料表中的其他記錄時,請使用自我聯結。若要在相同的查詢中列出某份資料表兩次,您至少必須針對單一資料表名稱的執行個體提供資料表別名。這個資料表別名會協助查詢處理器判斷資料行應該呈現右側或左側資料表版本的資料。
範例
A. 使用自我聯結來尋找多家廠商所提供的產品
下列範例會使用自我聯結來尋找多家廠商所提供的產品。
因為此查詢牽涉到 ProductVendor 資料表與本身的聯結,ProductVendor 資料表將顯示成兩個角色。為了區分這兩個角色,您必須在 FROM 子句中賦予 ProductVendor 資料表兩個不同的別名 (pv1 與 pv2)。這些別名將在查詢的其他部份用來限定資料行名稱。下列為自我聯結 Transact-SQL 陳述式的範例:
USE AdventureWorks;
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. 使用自我聯結來比對員工及其經理
下列範例會執行 HumanResources.Employee 資料表的自我聯結,以便產生所有經理以及向經理提出報告之員工的清單。
SELECT MgrTable.LoginID AS ManagerName,EmplTable.ManagerID,
EmplTable.LoginID, EmplTable.EmployeeID
FROM HumanResources.Employee AS EmplTable
JOIN HumanResources.Employee AS MgrTable
ON EmplTable.ManagerID = MgrTable.EmployeeID
ORDER BY MgrTable.LoginID, EmplTable.LoginID