2

こんばんは、ルート ノードでもリーフ ノードでもない、階層テーブル (赤い丸で囲んだ部分) の 1 つから中流階級の管理者を取得しようとするのに助けが必要です。

階層図・データ 階層図 データ

クエリを使用してすべてのリーフ ノードを取得できました

select level,  first_name ||' '|| last_name "FullName" 
from more_employees
where employee_id not in (select NVL(manager_id, 0) from more_employees)
start with employee_id = 1
CONNECT by prior employee_id = manager_id;

結果

where句でキーワード「in」を使用する必要があると確信していますが、異なる結果が得られ続けます。

4

2 に答える 2

2

このようなものはうまくいくはずだと私は信じています

select * from more_employees m1 where manager_id is not null
and exists ( select 1 from more_employees m2 where m2.manager_id=m1.employee_id)
于 2013-10-12T02:39:24.187 に答える
2

CONNECT_BY_IS_LEAFこれには疑似列を使用できます。

select level,  first_name ||' '|| last_name "FullName" 
from more_employees
where connect_by_isleaf = 0 and manager_id is not null
start with employee_id = 1
connect by prior employee_id = manager_id;

それを使用してすべての葉を取得することもできます。

select level,  first_name ||' '|| last_name "FullName" 
from more_employees
where connect_by_isleaf = 1
start with employee_id = 1
connect by prior employee_id = manager_id;

おそらく、サブセレクトを使用したソリューションよりも高速です

SQLFiddle の例を次に示します: http://sqlfiddle.com/#!4/511d9/2

于 2013-10-12T12:03:12.180 に答える