SQL - таблица сортировки с родительским дочерним отношением - PullRequest
2 голосов
/ 19 августа 2011

У нас есть таблица с отношением родитель-потомок, и мы хотим ее отсортировать. Критерии сортировки таковы, что при итерации по результату уже должна быть строка, соответствующая родительскому идентификатору:

ID   PARENT_ID 
EF01 EF02         // This is wrong as the row EF02 is after and will fail.
EF02    
BB   AA           // here BB < AA
AA   EF01 

Проблема в том, что оба ключа являются строковыми, поэтому сортировка по ID или PARENT_ID не решит проблему.

Ответы [ 3 ]

3 голосов
/ 19 августа 2011

У меня нет Oracle для тестирования.Это работает в SQL Server, и я считаю, что оно должно работать и в Oracle.

with R(id, parent_id, lvl) as
(
  select id,
         parent_id,
         1
  from YourTable
  where parent_id is null
  union all
  select T.id,
         T.parent_id,
         R.lvl + 1
  from YourTable as T
    inner join R
      on T.parent_id = R.id
)
select R.id,
       R.parent_id
from R
order by lvl

В Oracle могут быть другие способы сделать то же самое.

3 голосов
/ 19 августа 2011

Для Oracle, используя иерархические запросы :

 select id, parent_id, level from the_table
 start with parent_id is null
 connect by prior id = parent_id;
0 голосов
/ 19 августа 2011

Любая СУБД НЕ гарантирует порядок доставки строк, если только вы не запрашиваете данные в определенном порядке, используя «ORDER BY CLAUSE».

В большинстве СУБД вы можете указать, что данные хранятсяв определенном порядке, используя «ИНДЕКС КЛАСТЕРИНГА» в столбце, по которому вы хотите заказать.Однако вы не обязательно вернете данные в этом порядке, если вы не укажете «ORDER BY» в своем SQL.Кроме того, во многих СУБД это спецификация «наилучшего усилия» по внутренним причинам (дисковое пространство, одновременные единицы работы и т. Д.), Поэтому СУБД не может хранить данные в запрошенном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...