오라클 where IN 조건 질문 0 4 4,004

by 꼬막 [Oracle 기초] Oracle [2020.12.10 18:22:00]


질의캡처1.PNG (20,893Bytes)

안녕하세요,, 질문올려봅니다 ㅜ

파일첨부 봐주시면 이해가 되실겁니다..

일단 테스트용 쿼리입니다.

SELECT A2.CODE
 FROM (
       SELECT DECODE(LEVEL,1,'1000','1001') AS CODE
         FROM DUAL 
      CONNECT BY LEVEL <= 2 ) A1
    , (
       SELECT DECODE(LEVEL,1,'ALL',2,'1000',3,'1000',4,'1001',5,'1002','1003') AS CODE
         FROM DUAL 
      CONNECT BY LEVEL <= 6) A2
  WHERE A1.CODE(+)= A2.CODE 
    AND A2.CODE IN ('ALL',A1.CODE)
  ;

여기까지 원하는쿼리는 짯습니다.. 

하지만 A1 테이블의 결과가 없다고 가정했을때

WHERE 조건의 

A1.CODE(+)= A2.CODE

AND

A2.CODE IN ('ALL',A1.CODE) <-- 이부분의 A2.DEPT_CODE 가 ALL 인 사람은 무조건 나오더라구요.... 

원하는결과는 A1.DEPT_CODE가 없으면 아무결과가 나오지 말아야하는겁니다 ㅜㅜ 어떻게 하면 좋을까요?

by 마농 [2020.12.11 08:15:22]

자료 예시 코드가 중복되는데 맞나요? -> 코드 중복이 없어야 할텐데요?
이름은 양쪽 테이블에 다 있는거 맞나요? -> 한쪽에만 있어야 할텐데요?


by 꼬막 [2020.12.11 09:26:18]

A1테이블의 코드는 중복되서 나옵니다,,

 

예를들어 비유를하자면...

A1의 코드,이름은 수강과목코드 와 학생이름이고 A2의 코드,이름은 수강과목코드와 선생님 이름입니다

A1은 학생들의 수강신청 리스트 목록이며

A2는 수강과목의 지도자입니다 

원하는 결과가 A1의 수강신청 리스트에따라 

지도하는 선생님 리스트를 뽑는거였는데, 

코드가 ALL인 사람은 수강신청코드가 하나라도 A1리스트에 존재하면 나와야하기때문에 조건에 in을 주었구요.

문제는 A1의 리스트가 존재하지 않을때에도 ALL인 사람이 나와서, 질문드렸습니다..

질문이 엉성해서 죄송합니다..


by 마농 [2020.12.11 09:49:38]

수강하는 학생이 여러명인건 이해가 가는데, 교수도 여러명 가능한가요?
학생명과 교수명이 일치하는데? 좀 다르게 해서 예를 만들었으면 좋겠네요.
 

WITH enroll_student AS
(
SELECT '1000' dept_cd, 'A' s_nm FROM dual
UNION ALL SELECT '1001', 'B' FROM dual
UNION ALL SELECT '1001', 'C' FROM dual
)
, teach_professor AS
(
SELECT 'ALL' dept_cd, 'f' p_nm FROM dual
UNION ALL SELECT '1000', 'a' FROM dual
UNION ALL SELECT '1001', 'b' FROM dual
UNION ALL SELECT '1001', 'c' FROM dual
UNION ALL SELECT '1002', 'd' FROM dual
UNION ALL SELECT '1003', 'e' FROM dual
)
SELECT b.dept_cd
     , b.p_nm
  FROM (SELECT NVL(dept_cd, 'ALL') dept_cd
          FROM enroll_student
        -- WHERE 1=2    -- 수강 없을 때 테스트
         GROUP BY ROLLUP(dept_cd)
        ) a
     , teach_professor b
 WHERE a.dept_cd = b.dept_cd
;

 


by 꼬막 [2020.12.11 10:15:13]

감사합니다, 참고하는데 큰 도움이 될것같습니다.

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