Oracle
 sql >> Database >  >> RDS >> Oracle

Struttura ad albero in sql in Oracle. Come mostrare albero, nodi figlio e nodi padre in SQL Oracle

Query - L'intera struttura ad albero :

SELECT *
FROM   Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

Query - I figli di un determinato dipendente :

Non hai bisogno di una query gerarchica per questo.
(Il genitore è dato dalla variabile bind :parent_id )

SELECT *
FROM   Employee
WHERE  ParentID = :parent_id
ORDER BY LastName, FirstName, ID;

Query - I discendenti di un determinato dipendente :

La stessa query dell'intero albero ma con un punto di inizio diverso
(Il genitore è dato dalla variabile bind :parent_id )

SELECT *
FROM   Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

Query - Il dipendente e i suoi antenati :

Simile alla query precedente ma con CONNECT BY invertito e non sarà necessario ordinare i fratelli poiché ci sarà un solo manager immediato per dipendente.
(Il dipendente è dato dalla variabile bind :employee_id )

SELECT *
FROM   Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;

Query - Il manager del dipendente :

Identico alla query precedente ma con un filtro LEVEL = 2 per ottenere solo la riga principale immediata.
(L'impiegato è dato dalla variabile bind :employee_id )

SELECT e.*
FROM   Employee e
WHERE  LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;