Извлечь родителя и его потомков, связанных через один атрибут - PullRequest
0 голосов
/ 16 февраля 2020

Запрос на получение SEC_CODE для родителя, его потомка и всех внучат. Дочерние элементы подключаются через значение PREV_SE C.

enter image description here

Согласно приведенному выше изображению, 1. Здесь, если sec_code равен 1, запрос должен вернуть 1, 3, 4 7, 8 2. если sec_code равен 2, то запрос возвращает 2. 3. если sec_code равен 4, запрос возвращает 4,7,8

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020

Если вам строго требуется решение Oracle Speci c, вы можете попробовать запрос ниже с предложением CONNECT BY -

SELECT SEC_CODE,SEC_NAME,PREV_SEC
FROM YOURTABLE
START WITH SEC_CODE = 1
CONNECT BY PRIOR PREV_SEC = SEC_CODE;
1 голос
/ 16 февраля 2020

Вы можете использовать рекурсив CTE, чтобы получить желаемый результат, например, следующий запрос.

WITH CTE2 (SEC_CODE,SEC_NAME,PREV_SEC)
AS (
    SELECT SEC_CODE,SEC_NAME,PREV_SEC
    FROM YOURTABLE
    WHERE SEC_CODE = 1

    UNION ALL

    SELECT C1.SEC_CODE,C1.SEC_NAME,C1.PREV_SEC
    FROM YOURTABLE C1
    INNER JOIN CTE2 C2 ON C1.PREV_SEC = C2.SEC_CODE
    )
SELECT *
FROM CTE2

Примечание : заменить YOURTABLE на фактическое имя таблицы в приведенном выше запросе.

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