안녕하세요.
오라클 조건에 맞는 처리하는데 다른 방법이 있는지 문의드립니다.
(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'이어도 값을 가져오게 되어있습니다.
<현재 쿼리>
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'은 파라미터로 넘어온 값입니다.
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를 사용되도록 만들었는데, 좀 더 나은 쿼리 작성법이 있는지 궁금해서 남깁니다.
답변 부탁드립니다.
감사합니다.
"100 아이디를 가진 사용자의 담당 영역은 A가 아니라 B입니다."라고 하셨는데요.
이 말의 근거가 될만한 테이블의 정보는 없는건가요?
100 에만 해당하는 내용인지? 다른 ID 에도 해당 될 수 있는 내용인지?
A - 03 에 해당하는 내용인지?
왜 이런 조건을 줘야하는지? 조건이 잘 이해가 안가서요.
안녕하세요.
<사용자 정보> 테이블인데, CD 값이 부서라고 생각하시면, 프로젝트 CD=A는 A부서에서만 보여야 하는 건으로, 접속한 사용자가 부서 B일 경우 A의 정보를 가진 프로젝트는 보여지면 안 되도록 하려고 합니다.
100 번 사원이 B 부서라는 정보를 어딘가 가지고 있을텐데요?
그 정보를 조인히여 이용해야 할 듯 합니다.
네. 그 정보가 <TB_PM> 저 테이블의 데이터입니다.
PM_ID 칼럼이 하나면 상관이 없는데, 칼럼이 PM1_ID, PM2_ID 나눠져 있어서 DECODE를 사용했는데 다른 방법이 있을까 해서요.
답변 감사합니다.
보여 주신 정보에는 B 가 안보이는데요?