Как добавить root второй родительский идентификатор в таблицу оракулов - PullRequest
0 голосов
/ 14 мая 2019

У меня есть дочерняя родительская таблица, подобная этой (0 означает, что это верхний элемент):

itemID | parentItemId
---------------------
     1 |            0
     2 |            0
     3 |            0
     4 |            1
     5 |            1
     6 |            2
     7 |            5
     8 |            7
     9 |            7

Я хочу добавить новый столбец, который будет rootItemId в соответствии с этой логикой:

Если это верхний элемент, то rootItemId = itemID, иначе rootItemId будет элементом под корнем (т.е. уровень - 2) itemID.

Это будет выглядеть так:

itemID | parentItemId | rootItemId 
----------------------------------
     1 |            0 |          1
     2 |            0 |          2
     3 |            0 |          3
     4 |            1 |          4
     5 |            1 |          5
     6 |            2 |          6
     7 |            5 |          5
     8 |            7 |          5
     9 |            7 |          5

Я могу получить этот результат, используя следующий sql:

      select itemID, 
             parentItemId, 
             itemID as rootItemId 
        from ItemTable
       where itemID = 0

       union

      select itemID, 
             parentItemId, 
             connect_by_root parentItemId as rootItemId
        from ItemTable
        start with parentItemId in 
           (select itemID 
            from ItemTable 
            where parentItemId =0)
       connect by prior itemID  =  parentItemId

Есть ли более элегантный и эффективный способдостичь таких же результатов ?

Спасибо

...