使用自联接

表可以通过自联接与自身联接。要创建将某个表中的记录与同一表中的其他记录相联接的结果集时,使用自联接。若要在同一查询中两次列出某个表,必须至少为该表名称的一个实例提供表别名。此表别名帮助查询处理器确定列应从表的右边还是左边样式呈现数据。

示例

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