오라클 조건 처리 문의드립니다. 0 5 3,351

by 쪼롱이 [SQL Query] ORACLE 오라클 [2023.11.09 14:46:51]


안녕하세요.
오라클 조건에 맞는 처리하는데 다른 방법이 있는지 문의드립니다.

(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를 사용되도록 만들었는데, 좀 더 나은 쿼리 작성법이 있는지 궁금해서 남깁니다.

답변 부탁드립니다.

감사합니다.

by 마농 [2023.11.09 15:01:39]

"100 아이디를 가진 사용자의 담당 영역은 A가 아니라 B입니다."라고 하셨는데요.
이 말의 근거가 될만한 테이블의 정보는 없는건가요?
100 에만 해당하는 내용인지? 다른 ID 에도 해당 될 수 있는 내용인지?
A - 03 에 해당하는 내용인지?
왜 이런 조건을 줘야하는지? 조건이 잘 이해가 안가서요.


by 쪼롱이 [2023.11.09 15:11:25]

안녕하세요.

<사용자 정보> 테이블인데, CD 값이 부서라고 생각하시면, 프로젝트 CD=A는 A부서에서만 보여야 하는 건으로, 접속한 사용자가 부서 B일 경우 A의 정보를 가진 프로젝트는 보여지면 안 되도록 하려고 합니다.


by 마농 [2023.11.09 15:20:23]

100 번 사원이 B 부서라는 정보를 어딘가 가지고 있을텐데요?
그 정보를 조인히여 이용해야 할 듯 합니다.


by 쪼롱이 [2023.11.09 15:26:32]

네. 그 정보가 <TB_PM> 저 테이블의 데이터입니다.

PM_ID 칼럼이 하나면 상관이 없는데, 칼럼이 PM1_ID, PM2_ID 나눠져 있어서 DECODE를 사용했는데 다른 방법이 있을까 해서요.

 

답변 감사합니다.


by 마농 [2023.11.09 15:40:41]

보여 주신 정보에는 B 가 안보이는데요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입