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. In einer Personalanwendung kann beispielsweise eine Tabelle "Mitarbeiter " Informationen zum Vorgesetzten jedes Mitarbeiters enthalten und die ID des Vorgesetzten in der eigenen Zeile des Mitarbeiters speichern. Jeder Vorgesetzte wird ebenfalls als Mitarbeiter aufgeführt.

Mitarbeiter-ID

Vorname

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. Um den CEO in die Ergebnisse einzuschließen, wird eine äußere Verknüpfung verwendet, und der Managername wird als NULL für Zeilen zurückgegeben, in denen das Feld "ManagerID " kein übereinstimmenes EmployeeID-Feld aufweist.

Mitarbeiter

Leiter

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.