특정메뉴에 대한 삭제 권한을 가진 사용자 정보를 구하세요
대상테이블
SELECT M.NM_KOR AS "사원명", M.DEPART_DPT_CD AS "부서코드", M.DEPRT_NM_KOR AS "부서명", R.NAME AS "역할명", P.*
FROM (SELECT EMPLOYEE_ID , P.*
FROM A11.A1DT_ROLE_USER RU
, (
SELECT ROLE_ID
, MENU_ID
, ADD_PERMISSION AS "추가 권한"
, DEL_PERMISSION AS "삭제 권한"
, WRITE_PERMISSION AS "저장 권한"
, READ_PERMISSION AS "조회 권한"
, SELECT_PERMISSION AS "선택 권한"
, EXCEL_PERMISSION AS "엑셀 권한"
, PRINT_PERMISSION AS "출력 권한"
, EXIT_PERMISSION AS "닫기 권한"
, DISPLAY AS "표시여부"
FROM A11.A1DT_ROLE_MENU_PERMISSION
WHERE MENU_ID = 'E000837' AND DEL_PERMISSION = '1'
) P
WHERE RU.ROLE_ID = P.ROLE_ID
) P,
A11.A1AT_USER_MASTER M,
A11.A1DT_ROLE R
WHERE M.EMPLOYEE_ID = P.EMPLOYEE_ID AND P.ROLE_ID = R.ROLE_ID
UNION
SELECT NM_KOR, P.DEPT_CD, DEPRT_NM_KOR, R.NAME, EMPLOYEE_ID, P.ROLE_ID, P.MENU_ID
, P.ADD_PERMISSION, P.DEL_PERMISSION, P.WRITE_PERMISSION, P.READ_PERMISSION
, P.SELECT_PERMISSION, P.EXCEL_PERMISSION, P.PRINT_PERMISSION, P.EXIT_PERMISSION, P.DISPLAY
FROM A11.A1AT_USER_MASTER M,
(SELECT D.DEPT_CD
, P.ROLE_ID
, P.MENU_ID
, P.ADD_PERMISSION
, P.DEL_PERMISSION
, P.WRITE_PERMISSION
, P.READ_PERMISSION
, P.SELECT_PERMISSION
, P.EXCEL_PERMISSION
, P.PRINT_PERMISSION
, P.EXIT_PERMISSION
, DISPLAY
FROM A11.A1DT_ROLE_MENU_PERMISSION P,
A11.A1DT_ROLE_DEPT D
WHERE MENU_ID = 'E000837' AND DEL_PERMISSION = '1' AND D.ROLE_ID = P.ROLE_ID
) P
, A11.A1DT_ROLE R
WHERE M.DEPART_DPT_CD = P.DEPT_CD AND P.ROLE_ID = R.ROLE_ID;
-- union 은 중복 검사를 해서 union all 보다 느림.
-- 그러니 데이터를 먼저 정제하고 union all 을 사용하는 것이 더 효율적이다.
-- 메인이 되는 테이블 = 리딩테이블
-- 오라클 HINT 요즘은 권장하지 않음 -> 차라리 옵티마이저가 알아들을 수 있게 쿼리를 짜라
-- 왜냐면 유지보수 할 때 힘들어짐. 버전이 업데이트 되면서 옵티마이저가 성능이 좋아졌는데 힌트가 있으면 하나하나 힌트를 찾아서 수정해야 함.
-- 옵티마이저는 통계를 가지고 작동하기 때문에, 실행 방식이 달라질 수 있기 때문에...! JOIN ORDDERS