Oracle
 sql >> Base de données >  >> RDS >> Oracle

Structure arborescente dans sql dans Oracle.Comment afficher l'arbre, les nœuds enfants et les nœuds parents dans SQL Oracle

Requête - Toute l'arborescence :

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

Requête - Les enfants d'un employé donné :

Vous n'avez pas besoin d'une requête hiérarchique pour cela.
(Le parent est donné par la variable de liaison :parent_id )

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

Requête - Les descendants d'un employé donné :

La même requête que pour l'arbre entier mais avec un point de départ différent
(Le parent est donné par la variable de liaison :parent_id )

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

Requête - L'employé et ses ancêtres :

Similaire à la requête précédente mais avec le CONNECT BY inversé et vous n'aurez pas besoin de commander les frères et sœurs car il n'y aura qu'un seul responsable immédiat par employé.
(L'employé est donné par la variable de liaison :employee_id )

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

Requête - Le responsable de l'employé :

Identique à la requête précédente mais avec un filtre LEVEL = 2 pour obtenir simplement la ligne parent immédiate.
(L'employé est donné par la variable de liaison :employee_id )

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