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

få ALLE børn på sidste niveau (blade) fra en node (hierariske forespørgsler Oracle 11G)

Jeg synes, sådan noget burde gøre tricket:

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH r.id_father IS NULL)
WHERE isleaf = 1

Åh, og forresten, du kan få alle blade uden selv at bruge hierahisk forespørgsel. Vælg blot alle noder, som ikke er fars node for nogen node fra relationstabellen. Sådan noget:

SELECT n.* FROM NODES n
WHERE NOT EXISTS (SELECT ID_FATHER FROM RELATION r
                  WHERE r.id_father = n.id)

For at få bladknuderne fra den angivne node, skal du blot ændre betingelsen i START WITH-klausulen for at starte træet omvendt fra den node, du er interesseret i. For eksempel vil denne forespørgsel returnere dig alle underordnede blade af node med id =5 :

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH n.id = 5)
WHERE isleaf = 1


  1. Hvordan kan man iterere over lagrede procedureresultater fra en anden lagret procedure....uden markører?

  2. Hvordan kan Hibernate kortlægge SQL-datatypen nvarchar(max)?

  3. PHP INDSÆT et variabelt antal poster til mysql fra en html-formular

  4. alternativ til mysql_field_name i mysqli