У меня есть таблица с двумя столбцами
----------------------
| 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');
У меня есть примеры данных, как показано на рисунке.
В качестве желаемого результата будет
Поэтому я попыталсярешить эту проблему с помощью 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
, но не удалось получить желаемый результат.Следовательно, ищите решение.