안녕하세요,, 질문올려봅니다 ㅜ
파일첨부 봐주시면 이해가 되실겁니다..
일단 테스트용 쿼리입니다.
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가 없으면 아무결과가 나오지 말아야하는겁니다 ㅜㅜ 어떻게 하면 좋을까요?
A1테이블의 코드는 중복되서 나옵니다,,
예를들어 비유를하자면...
A1의 코드,이름은 수강과목코드 와 학생이름이고 A2의 코드,이름은 수강과목코드와 선생님 이름입니다
A1은 학생들의 수강신청 리스트 목록이며
A2는 수강과목의 지도자입니다
원하는 결과가 A1의 수강신청 리스트에따라
지도하는 선생님 리스트를 뽑는거였는데,
코드가 ALL인 사람은 수강신청코드가 하나라도 A1리스트에 존재하면 나와야하기때문에 조건에 in을 주었구요.
문제는 A1의 리스트가 존재하지 않을때에도 ALL인 사람이 나와서, 질문드렸습니다..
질문이 엉성해서 죄송합니다..
수강하는 학생이 여러명인건 이해가 가는데, 교수도 여러명 가능한가요?
학생명과 교수명이 일치하는데? 좀 다르게 해서 예를 만들었으면 좋겠네요.
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 ;