Выберите родителя родителя, когда не является нулем в oracle - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть эти строки в указанной c родительской дочерней таблице:

Id - parentId
1  - null
2  - null
3  - 2
4  - 2
5  - 4
6  - 1

Действительно, например, я хочу ввести 3 и получить 2, ввести 5 и получить 2, и ввести 6 и получить 1 как я могу это сделать?

1 Ответ

0 голосов
/ 24 апреля 2020

Вам нужен иерархический запрос (connect by ...) Примерно так:

with
  tbl (id, parentid) as (
    select 1, null from dual union all
    select 2, null from dual union all
    select 3, 2    from dual union all
    select 4, 2    from dual union all
    select 5, 4    from dual union all
    select 6, 1    from dual
  )
select  id
from    tbl
where   connect_by_isleaf = 1
start   with id = 5
connect by   id = prior parentid
;

   ID
-----
    2

"В реальной жизни" у вас будет таблица tbl со столбцами id и parentid (I смоделировали это в предложении with, но это только для удобства; сначала удалите его.) И вы не станете жестко программировать начальный узел; вы, вероятно, будете использовать переменную связывания в предложении start with.

Ключ здесь - это предложение where, использующее псевдостолбец connect_by_isleaf.

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