0
私はConnect Byクエリを使用してグループに階層グループを表示しています。このページでは、親グループを選択するためのComboboxがあります。しかし、現在編集中のグループを含むすべての行を非表示にしたい。SYS_CONNECT_BY_PATHによって作成されたパスで前回のクエリで検索
これは
GROUPS
-------------
GROUP_ID, GROUP_NAME, GROUP_TYPE, PARENT_ID
私の最初のクエリがいた、私の表です。
SELECT * FROM
(SELECT
GROUP_ID,
LPAD('-',LEVEL,'-')|| GROUP_NAME GROUP_NAME,
SYS_CONNECT_BY_PATH(GROUP_NAME, '->') GROUP_NAME_PATH
FROM GROUPS
START WITH PARENT_ID IS NULL AND TYPE='G'
CONNECT BY PRIOR GROUP_ID=PARENT_ID)
この結果はグリッド上にありました。
27 -Generel Manager ->Generel Manager,
28 --Project Manager ->Generel Manager->Project Manager,
24 ---System Administrator ->Generel Manager->Project Manager->System Administrator
25 ---Software Developer ->Generel Manager->Project Manager->Software Developer
26 ----Intern ->Generel Manager->Project Manager->Software Developer->Intern
たとえば、ページEditgroup.aspx?group_id=24
で
それはtheeseすべての行を示しているが、私はグループがselfchildすることができないので、GROUP_ID = 24 が含まれているすべての行のパスを非表示にします。
このクエリで一時的な解決策が見つかりました。
SELECT * FROM
(SELECT
GROUP_ID,
LPAD('-',LEVEL,'-')|| GROUP_NAME GROUP_NAME,
SYS_CONNECT_BY_PATH(GROUP_NAME, '->') || ',' GROUP_NAME_PATH
FROM GROUPS
START WITH PARENT_ID IS NULL AND GROUP_TYPE='G'
CONNECT BY PRIOR GROUP_ID=PARENT_ID)
WHERE HIYERARSI_ID NOT LIKE '%,24,%'
24はURLから来ています。
私たちは大きなデータを持っていれば、将来的には効率的な解決策にはならないと思います。
パスにこのIDが含まれているかどうかをよりスマートな方法で検出するにはどうすればよいですか?コードの下
見つけるために、書き換えについてのみ親がChild_id = 24または類似の状態で始めますか? – Randy