Это похоже на иерархический запрос.Будет ли это делать?
SQL> with test (person, supervisor) as
2 (select 'bob', 'alice' from dual union all
3 select 'mary', 'susan' from dual union all
4 select 'alice', 'david' from dual union all
5 select 'david', 'mary' from dual
6 )
7 select sys_connect_by_path(supervisor, '->') sv
8 from test
9 start with person = 'bob'
10 connect by person = prior supervisor;
SV
---------------------------------------------------------------------
->alice
->alice->david
->alice->david->mary
->alice->david->mary->susan
SQL>
Оно начинается с"Боб" (как вы сказали, что должно), а соединяет каждого человека с его руководителем (то есть указываетотношения между родительскими и дочерними строками в иерархии).Подробнее об иерархических запросах здесь .
Что касается отправленного вами "решения": что ж, оно недопустимо (вместо *
должен был быть ,
; но тогдаопять же, вы бы предпочли использовать ANSI JOIN).Когда это исправлено, он просто возвращает все строки, кроме первой в вашей таблице, поэтому я не уверен, почему они называют это "решением".
Он объединяет одну и ту же таблицудважды, так что это называется самосоединение .