Возможный аккуратный способ реализовать это - добавить еще одно поле, содержащее «путь» к записи. Скажем, верхняя запись - ID = 1. У него есть дочерний элемент с ID = 5, и у него снова есть дочерний элемент с ID = 20, тогда в последней записи будет путь
/ 1 / 5/20
Поэтому, если вы хотите, чтобы все дочерние узлы вашего верхнего узла вы делали
select * from MyTable where Path like '/1/%'
(извините, синтаксис сервера sql, я не являюсь разработчиком оракула - но концепция все еще применима)
Чтобы получить детей среднего узла
select * from MyTable where Path like '/1/5/%'
Отличительной особенностью этого решения является то, что вы можете применять индексы к полю "путь", поэтому оператор будет выполняться с использованием только одного сканирования индекса, что делает его очень эффективным.