SQL – self join

Konstrukcja self join nie jest niczym specjalnym w SQL. Jest to po prostu powiązanie (join) tabeli samej ze sobą:

SELECT mainAlias.*, joinAlias.* 
    FROM PEOPLE mainAlias 
    JOIN PEOPLE joinAlias ON...

Kiedy jest to przydatne?

Sytuacja gdy potrzebujemy odwoływać się do tej samej tabeli najczęściej powstaje gdy któraś z kolumn tabeli odwołuje się bezpośrednio do klucza głównego tabeli. Przykładowo mając tabelę PEOPLE zawierającą następujące dane:

IdNameSurnameparentId
1JohnCon
2MarkCon1
3ShonCon2

widać, że kluczem głównym jest kolumna Id, a kolumną odwołującą się do niego jest kolumna parentId (w tym wypadku wskazująca na to kto jest rodzicem osoby). W celu uzyskania par dziecko-rodzic, można użyć właśnie konstrukcji self join:

SELECT child.Name, child.Surename, parent.Name, parent.Surname
    FROM PEOPLE child 
    JOIN PEOPLE parent ON child.parentId = parent.id

co zwraca następujące rezultaty:

child.Namechild.Surnameparent.Nameparent.Surname
MarkConJohnCon
ShonConMarkCon

Jak widać, nie uzyskaliśmy połączenia pomiędzy John Con a nieistniejącym rodzicem (patrz na osobę o id = 1 w tabeli PEOPLE) – jest to wynik typu powiązania (typu join). Self join pozwala na dowolny typ powiązań (left, righy, inner, outer…).

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *