지난번 질문은 이해가 잘 되어서 쉽게 비슷한 쿼리들을 잘 바꿔나갔습니다.
답변주신 김상기님 감사드립니다..
염치스럽지만 다시한번 같은질문을 드리게 되었네요 ..
oracle 쿼리입니다.
SELECT m.menu_seq
, m.p_menu_seq
, m.menu_name
, m.url
, level lvl
FROM tm_admin_menu m
WHERE m.use_yn = 'Y' AND m.show_yn = 'Y'
AND EXISTS(SELECT 1 FROM tm_admin_auths WHERE menu_seq = m.menu_seq AND role_seq = #{roleSeq} AND auth_se IN( '${authSe}' ))
START WITH m.p_menu_seq = 0
CONNECT BY PRIOR m.menu_seq = m.p_menu_seq
ORDER SIBLINGS BY m.sort_no
결과
menu_seq |
p_menu_seq |
menu_name |
url |
lvl |
8 |
0 |
a |
asdf |
1 |
9 |
8 |
b |
asdf |
2 |
10 |
8 |
c |
asdf |
2 |
11 |
8 |
d |
asdf |
2 |
15 |
8 |
e |
asdf |
2 |
psql
WITH RECURSIVE a as (
SELECT m.menu_seq
, m.p_menu_seq
, m.menu_name
, m.url
, 1 lvl
FROM tm_admin_menu m
WHERE m.p_menu_seq = 0 and m.use_yn = 'Y' AND m.show_yn = 'Y'
AND EXISTS(SELECT 1 FROM tm_admin_auths WHERE menu_seq = m.menu_seq AND role_seq = 5 AND auth_se IN( 'R' ))
UNION ALL
SELECT m.menu_seq
, m.p_menu_seq
, m.menu_name
, m.url
, a.lvl + 1
FROM tm_admin_menu m
JOIN a ON a.menu_seq = m.p_menu_seq
// JOIN a ON m.menu_seq = m.p_menu_seq
// 두개다 안되네...
) SELECT * FROM a
menu_seq |
p_menu_seq |
menu_name |
url |
lvl |
8 |
0 |
a |
asdf |
1 |
아래의 psql로 변경을 해보았는데.... 위 아래의 결과가 다르게 나옵니다.
제 쿼리를 봐주시면 감사하겠습니다.
|