Циклический запрос Oracle для получения значения плюс дочерние значения из той же таблицы - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица, которая содержит значения в иерархической структуре. Мне было интересно, если бы кто-нибудь знал о запросе, где я мог бы пройтись по каждой строке, находя ее ID, а затем искать строки с PARENTID того же значения. Так, например:

со столом

ID  PARENTID    LEVEL   VALUE
-------------------------------
1   0           COUNTRY USA
2   1           CITY    NYC
3   1           CITY    LA
4   2           TEAM    GIANTS
5   2           TEAM    JETS
6   3           TEAM    RAMS
7   3           TEAM    CHARGERS

Я мог бы начать с поиска ID: 2 (Нью-Йорк) и оттуда найти все команды в этом городе. Нечто подобное (но я не знаю, сколько всего циклов мне нужно сделать)

SELECT ID2,VALUE FROM TABLE1 WHERE PARENTID = ID1; 

Дает мне:

3,LA
6,RAMS
7,CHARGERS

1 Ответ

0 голосов
/ 24 января 2019

connect by - это общий способ прохождения иерархии, подобной этой.Если вы добавите start with, вы можете выбрать отправную точку в иерархии.

SELECT table1.*, level
FROM table1
START WITH id = 3
CONNECT BY parentid = PRIOR id;

Обратите внимание, что level - это ключевое слово Oracle, которое сообщит вам, сколько циклов вы прошли до сих пор.Я бы не рекомендовал использовать его в качестве имени столбца. Есть и другие псевдоколонки и функции, которые могут оказаться полезными для вас .

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