sql >> Database >  >> RDS >> Oracle

Dubbele substructuren verwijderen uit CONNECT-BY-query in oracle

Het hoofdknooppunt in de eindige hiërarchie moet altijd bekend zijn. Volgens de definitie:http://en.wikipedia .org/wiki/Tree_structure de root node is een node die geen ouders heeft. Om te controleren of een bepaalde node een root node is, neem "parent_id" en controleer in de tabel of er een record bestaat met deze id. De query kan er als volgt uitzien:

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;


  1. Is het mogelijk om een ​​tekstbestand uit te voeren vanuit een SQL-query?

  2. Converteren van UniqueIdentifier naar BigInt en terug?

  3. De sortering van een SQL Server-database wijzigen met T-SQL

  4. Een REST API aanroepen vanuit een trigger of opgeslagen procedure in mysql?