Как найти бабушку и дедушку, используя SQL? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица с двумя столбцами

 ----------------------
|  NAME | FATHER_NAME  |
 ----------------------
DDL :

CREATE TABLE RELATION (NAME VARCHAR(20), FATHER_NAME VARCHAR(20));

INSERT INTO RELATION VALUES ('ADESH','ASHOK');
INSERT INTO RELATION VALUES ('ASHOK','KA');
INSERT INTO RELATION VALUES ('KA',NULL);
INSERT INTO RELATION VALUES ('ANSH','ADESH');
INSERT INTO RELATION VALUES ('BASH','ANSH');

INSERT INTO RELATION VALUES ('DEVEN','SUBASH');
INSERT INTO RELATION VALUES ('SUBASH','KA');

INSERT INTO RELATION VALUES ('PRAKASH',NULL);
INSERT INTO RELATION VALUES ('PRADEEP','PRAKASH');
INSERT INTO RELATION VALUES ('SAI','PRADEEP');

У меня есть примеры данных, как показано на рисунке.

enter image description here

В качестве желаемого результата будет

enter image description here

Поэтому я попыталсярешить эту проблему с помощью CONNECT_BY или Recursive CTE

WITH REL_CTE AS
(
    SELECT NAME,FATHER_NAME, 1 AS L
    FROM RELATION 
    WHERE FATHER_NAME IS NULL

    UNION ALL

    SELECT R.NAME,R.FATHER_NAME,CTE.L+1
    FROM RELATION R JOIN REL_CTE CTE
    ON R.FATHER_NAME = CTE.NAME

)

SELECT * FROM REL_CTE 

, но не удалось получить желаемый результат.Следовательно, ищите решение.

1 Ответ

0 голосов
/ 26 июня 2019

Один из возможных способов сделать это - с помощью рекурсивного CTE, как показано ниже.Однако, если вы всегда хотите именно бабушку и дедушку, то есть меня -> отца -> дедушку, вы можете просто сделать самостоятельное объединение, которое будет гораздо более эффективным, чем CTE.Обратите внимание, что с помощью CTE вы можете получить прабабушку и дедушку и т. Д.1011 *

...