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

Suppression des sous-arborescences en double de la requête CONNECT-BY dans Oracle

Le nœud racine dans une hiérarchie finie doit toujours être connu.Selon la définition :http://en.wikipedia .org/wiki/Tree_structure le nœud racine est un nœud qui n'a pas de parents. Pour vérifier si un nœud donné est un nœud racine, prenez "parent_id" et vérifiez dans la table s'il existe un enregistrement avec cet identifiant. La requête peut ressembler à ceci :

SELECT id,parent_id,
  CONNECT_BY_ISLEAF leaf,
  LEVEL,
  SYS_CONNECT_BY_PATH(id, '/') Path,
  SYS_CONNECT_BY_PATH(parent_id, '/') Parent_Path
FROM tree_hierarchy th
WHERE CONNECT_BY_ISLEAF<>0
  CONNECT BY PRIOR id = PARENT_id
START WITH not exists (
      select 1 from tree_hierarchy th1 
      where th1.id = th.parent_id
  )
ORDER SIBLINGS BY ID;