Self-join jest nieco dziwnym typem połączenia tabel, a raczej tabeli, ponieważ łączenie przeprowadza się na tej samej tabeli. Przydaje się głównie do sprawdzenia wyników.
PostgreSQL Self-Join Nieco teorii…
Poniżej widzisz schemat działania Self-Join.
1 2 3 4 5 |
SELECT kolumna_1,...,kolumna_n FROM tabela_A a1 INNER JOIN tabela_A b1 ON a1.id = b1.id; |
W celu przygotowania ćwiczeń przygotuj nową tabelę wraz z przykładowymi danymi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
CREATE TABLE employee ( employee_id INT PRIMARY KEY, first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL, manager_id INT, FOREIGN KEY (manager_id) REFERENCES employee (employee_id) ON DELETE CASCADE ); INSERT INTO employee ( employee_id, first_name, last_name, manager_id ) VALUES (1, 'Jan', 'Kowalski', NULL), (2, 'Tomasz', 'Mann', 1), (3, 'Elon', 'Musk', 1), (4, 'Jarosław', 'Kulczyk', 2), (5, 'Joanna', 'Marzec', 2), (6, 'Katarzyna', 'Stencel', 3), (7, 'Anna', 'Kwiatkowska', 3), (8, 'Anita', 'Misztal', 3); |
Manager_id jest wartością, która reprezentuje poziom managera. Im wyższa wartość tym manager jest niższego stopnia. Osoba, która nie ma przypisanej żadnej wartości jest managerem najwyższego szczebla i nie ma nikogo nad sobą.
Przykłady, przykłady…
Pierwszy przykład pokaże zależności pomiędzy managerami różnych szczebli.
1 2 3 4 5 6 7 8 |
SELECT e.first_name || ' ' || e.last_name employee, m .first_name || ' ' || m .last_name manager FROM employee e INNER JOIN employee m ON m .employee_id = e.manager_id ORDER BY manager; |
W wyniku otrzymasz listę pracowników oraz managerów do których bezpośrednio raportują.
Patrząc na wyniki brakuje jednego wyniku, która jest szefem wszystkich szefów i w polu manager posiada wartość nieokreśloną null. W tym przypadku musisz użyć poznanego wcześniej left join’a.
1 2 3 4 5 6 7 8 |
SELECT e.first_name || ' ' || e.last_name employee, m .first_name || ' ' || m .last_name manager FROM employee e LEFT JOIN employee m ON m .employee_id = e.manager_id ORDER BY manager; |
W wyniku pojawi się również Jan Kowalski, który jest głównym szefem zespołu.
W kolejnym wpisie pokażę Cross Join.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).