Condividi tramite


Utilizzo di self join

Un self join consente di unire una tabella a se stessa. Utilizzare un self join quando si desidera creare un set di risultati che unisce record in una tabella ad altri record nella stessa tabella. Per elencare una tabella due volte nella stessa query, è necessario specificare un alias di tabella per almeno un'istanza del nome di tabella. Questo alias di tabella consente a Query Processor di determinare se nelle colonne devono essere presentati i dati dalla versione da destra verso sinistra della tabella.

Esempi

A. Utilizzo di un self join per trovare i prodotti offerti da più fornitori

Nell'esempio seguente viene utilizzato un self join per trovare i prodotti offerti da più fornitori.

Poiché la query riportata di seguito comporta l'esecuzione di un join della tabella ProductVendor con se stessa, la tabella ProductVendor svolge due ruoli. Tali ruoli possono essere distinti assegnando alla tabella ProductVendor due alias diversi, pv1 e pv2, nella clausola FROM. Tali alias vengono utilizzati per qualificare i nomi di colonna nella parte rimanente della query. Di seguito è riportato un esempio di istruzione di self join 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. Utilizzo di un self join per trovare la corrispondenza tra i venditori e le relative aree

Nell'esempio seguente viene eseguito un self join della tabella Sales.SalesPerson per produrre un elenco di tutte le aree con i relativi venditori.

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