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 per il self join 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. Utilizzo di un self join per trovare la corrispondenza tra i dipendenti e i relativi responsabili
Nell'esempio seguente viene eseguito un self join della tabella HumanResources.Employee per produrre un elenco di tutti i responsabili e i relativi dipendenti.
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