안녕하세요.
오라클 조건에 맞는 처리하는데 다른 방법이 있는지 문의드립니다.
(2개의 테이블 간단하게 표현했습니다.)
<TB_PJT>
SN | CD | FG_CD |
20231109 | A | 03 |
<TB_PM>
SN | CD | PM1_ID | PM2_ID |
20231109 | A | 100 | 200 |
쿼리 수행할 때 파라미터 값으로는 사용자 아이디로만 조회합니다.
100 아이디를 가진 사용자의 담당 영역은 A가 아니라 B입니다.
현재 쿼리가 PM1_ID로만 조회를 해서 해당 프로젝트가 CD = 'A', FG_CD = '03'이어도 값을 가져오게 되어있습니다.
<현재 쿼리>
1 2 3 4 5 6 7 | SELECT PM1_ID FROM TB_PJT A, TB_PM B WHERE 1 = 1 AND A.SN = B.SN AND A.CD = B.CD AND PM1_ID = '100' ; |
'100' 사용자가 조회할 경우 프로젝트 중 CD = 'A', FG_CD = '03' 의 데이터 프로젝트면 제외되어야 합니다.
<수정한 쿼리> 조건문의 '100'은 파라미터로 넘어온 값입니다.
1 2 3 4 5 6 7 | SELECT DECODE(CD, 'A' , DECODE(FG_CD, '03' , PM2_ID, PM1_ID), PM1_ID) AS PM_ID FROM TB_PJT A, TB_PM B WHERE 1 = 1 AND A.SN = B.SN AND A.CD = B.CD AND '100' = DECODE(CD, 'A' , DECODE(FG_CD, '03' , PM2_ID, PM1_ID), PM1_ID) ; |
<결과>
SN | CD | FG | PM_ID |
20231101 | B | 02 | 100 |
20231109 | C | 01 | 100 |
위 결과처럼 A의 03은 제외되어서 조회되도록 하려고 하는 것입니다.
SELECT, WHERE 절에 같은 DECODE를 사용되도록 만들었는데, 좀 더 나은 쿼리 작성법이 있는지 궁금해서 남깁니다.
답변 부탁드립니다.
감사합니다.