Verwenden von Selbstjoins

Eine Tabelle kann in einem Selbstjoin mit sich selbst verknüpft werden. Sie verwenden einen Selbstjoin, wenn Sie ein Resultset erstellen möchten, durch das Datensätze in einer Tabelle mit anderen Datensätzen in der gleichen Tabelle verknüpft werden. Um eine Tabelle zweimal in der gleichen Abfrage aufzulisten, müssen Sie einen Tabellenalias für mindestens eine Instanz des Tabellennamens bereitstellen. Mithilfe dieses Tabellenalias kann der Abfrageprozessor bestimmen, ob in Spalten Daten aus der rechten oder linken Version der Tabelle dargestellt werden sollen.

Beispiele

A. Verwenden eines Selbstjoins, um Produkte mehrerer Hersteller zu finden

Im folgenden Beispiel wird ein Selbstjoin für die Suche nach Produkten verwendet, die von mehreren Herstellern geliefert werden.

Da diese Abfrage eine Verknüpfung der ProductVendor-Tabelle mit sich selbst beinhaltet, tritt die ProductVendor-Tabelle in zwei Rollen auf. Um diese Rollen zu unterscheiden, müssen Sie der ProductVendor-Tabelle in der FROM-Klausel zwei verschiedene Aliasnamen (pv1 und pv2) zuordnen. Mit diesen Aliasnamen werden die Spaltennamen im verbleibenden Teil der Abfrage gekennzeichnet. Das folgende Beispiel zeigt die Transact-SQL-Anweisung zum Selbstjoin:

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. Verwenden eines Selbstjoins für die Zuordnung von Vertriebsmitarbeitern und Vertriebsgebieten

Im folgenden Beispiel wird ein Selbstjoin der Sales.SalesPerson-Tabelle ausgeführt, um eine Liste aller Vertriebsgebiete und der zuständigen Vertriebsmitarbeiter zu erstellen.

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