Używanie sprzężeń własnych

Ukończone

Do tej pory używane sprzężenia obejmowały różne tabele. Mogą istnieć scenariusze, w których trzeba pobrać i porównać wiersze z tabeli z innymi wierszami z tej samej tabeli. Na przykład w aplikacji kadr tabela Employee może zawierać informacje o kierowniku każdego pracownika i przechowywać identyfikator menedżera w wierszu pracownika. Każdy menedżer jest również wymieniony jako pracownik.

EmployeeID (Identyfikator pracownika)

FirstName

Identyfikator menedżera

1

Dan

NULL

2

Aisha

1

3

Rosie

1

4

Naomi

3

Aby pobrać informacje o pracownikach i dopasować je do powiązanego menedżera, możesz użyć tabeli dwa razy w zapytaniu, dołączając ją do siebie na potrzeby zapytania.

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;

Wyniki tego zapytania obejmują wiersz dla każdego pracownika z nazwą swojego menedżera. Dyrektor generalny firmy nie ma menedżera. Aby uwzględnić dyrektora generalnego w wynikach, jest używane sprzężenie zewnętrzne, a nazwa menedżera jest zwracana jako NULL dla wierszy, w których pole ManagerID nie ma pasującego pola EmployeeID .

Pracownik

Menedżer

Dan

NULL

Aisha

Dan

Rosie

Dan

Naomi

Rosie

Istnieją inne scenariusze, w których chcesz porównać wiersze w tabeli z różnymi wierszami w tej samej tabeli. Jak już wiesz, dość łatwo jest porównać kolumny w tym samym wierszu przy użyciu języka T-SQL, ale metoda porównywania wartości z różnych wierszy (takich jak wiersz, który przechowuje czas rozpoczęcia, a drugi wiersz w tej samej tabeli, w której jest przechowywany odpowiedni czas zatrzymania), jest mniej oczywisty. Sprzężenia własne są przydatną techniką dla tego typu zapytań.

Aby wykonać takie zadania, należy wziąć pod uwagę następujące wytyczne:

  • Zdefiniuj dwa wystąpienia tej samej tabeli w klauzuli FROM i połącz je zgodnie z potrzebami przy użyciu sprzężeń wewnętrznych lub zewnętrznych.
  • Użyj aliasów tabeli, aby odróżnić dwa wystąpienia tej samej tabeli.
  • Użyj klauzuli ON, aby podać filtr porównujący kolumny z jednym wystąpieniem tabeli z kolumnami z drugiego wystąpienia tabeli.