sql >> Base de Datos >  >> RDS >> Oracle

Eliminación de subárboles duplicados de la consulta CONNECT-BY en Oracle

El nodo raíz en la jerarquía finita siempre debe conocerse. Según la definición:http://en.wikipedia .org/wiki/Tree_structure el nodo raíz es un nodo que no tiene padres. Para verificar si un nodo determinado es un nodo raíz, tome "parent_id" y verifique en la tabla si existe un registro con esta identificación. La consulta podría verse así:

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;