Код: Выделить всё
CREATE TABLE direktora (
id INTEGER PRIMARY KEY,
direktor INTEGER REFERENCES direktora
);
INSERT INTO direktora VALUES (4,4);
INSERT INTO direktora VALUES (3,4);
INSERT INTO direktora VALUES (2,3);
INSERT INTO direktora VALUES (1,2);
INSERT INTO direktora VALUES (10,10);
INSERT INTO direktora VALUES (8,10);
INSERT INTO direktora VALUES (7,8 );
INSERT INTO direktora VALUES (9,7);
INSERT INTO direktora VALUES (6,9);
INSERT INTO direktora VALUES (5,6);
SELECT * FROM direktora ORDER BY id;
Код: Выделить всё
ID DIREKTOR
---------- ----------
1 2
2 3
3 4
4 4
5 6
6 9
7 8
8 10
9 7
10 10
direktor - ID его начальника
Kак получить список всех начальников человека с id = 9 ?
Вообще-то, конечно, интересует общий случай.
Пробовал так:
Код: Выделить всё
SELECT DISTINCT d1.id, d1.direktor
FROM direktora d1,
direktora d2
WHERE (d1.direktor = d2.id OR d2.direktor = d1.id)
AND (d1.direktor != d1.id AND d2.direktor != d2.id)
ORDER BY d1.id;
интересует чистое SQL решение, без PL и Co.
нашел вот еще:
Код: Выделить всё
SELECT id, direktor FROM direktora
START WITH id = 9
CONNECT BY PRIOR id = direktor;