Verwenden von Selbstverknüpfungen

Abgeschlossen

Bisher wurden für alle Verknüpfungen verschiedene Tabellen verwendet. Es können auch Szenarios entstehen, in denen Sie Zeilen aus einer Tabelle abrufen und mit anderen Zeilen aus derselben Tabelle vergleichen müssen. Beispielsweise kann eine Employee-Tabelle in einer Personalanwendung Informationen zum Vorgesetzten (Manager) eines jeden Mitarbeiters enthalten und die ID des Vorgesetzten in der Zeile des Mitarbeiters speichern. Jeder Vorgesetzte wird ebenfalls als Mitarbeiter aufgeführt.

EmployeeID

FirstName

ManagerID

1

Dan

NULL

2

Aisha

1

3

Rosie

1

4

Naomi

3

Sie können die Tabelle zweimal in Ihrer Abfrage verwenden und sie für die Abfrage mit sich selbst verknüpfen, um die Mitarbeiterinformationen abzurufen und diese mit dem zugehörigen Vorgesetzten abzugleichen.

SELECT emp.FirstName AS Employee, 
       mgr.FirstName AS Manager
FROM HR.Employee AS emp
LEFT OUTER JOIN HR.Employee AS mgr
  ON emp.ManagerID = mgr.EmployeeID;

Die Ergebnisse dieser Abfrage enthalten eine Zeile für jeden Mitarbeiter mit dem Namen des zugehörigen Vorgesetzten. Der CEO des Unternehmens hat keinen Vorgesetzten. Damit der CEO in den Ergebnissen enthalten ist, wird eine äußere Verknüpfung verwendet, und der Name des Vorgesetzten enthält einen NULL-Wert für Zeilen, in denen es kein übereinstimmendes EmployeeID-Feld für das Feld ManagerID gibt.

Mitarbeiter

Manager

Dan

NULL

Aisha

Dan

Rosie

Dan

Naomi

Rosie

Es gibt weitere Szenarios, in denen Sie Zeilen in einer Tabelle mit anderen Zeilen aus derselben Tabelle vergleichen müssen. Wie Sie gesehen haben, ist es relativ einfach, Spalten in derselben Zeile mit T-SQL zu vergleichen, jedoch ist die Methode zum Vergleichen von Werten aus verschiedenen Zeilen weniger offensichtlich (z. B. eine Zeile, die eine Startzeit enthält, mit einer anderen Zeile in derselben Tabelle, die eine zugehörige Endzeit enthält). Für diese Arten von Abfragen sind Selbstverknüpfungen nützlich.

Für Aufgaben wie diese sollten Sie die folgenden Richtlinien beachten:

  • Definieren Sie zwei Instanzen derselben Tabelle in der FROM-Klausel, und verknüpfen Sie diese nach Bedarf mit inneren und äußeren Verknüpfungen.
  • Verwenden Sie Tabellenaliase, um die zwei Instanzen derselben Tabelle zu unterscheiden.
  • Verwenden Sie die ON-Klausel, um einen Filter zum Vergleichen der Spalten einer Instanz der Tabelle mit Spalten aus der anderen Instanz der Tabelle anzugeben.