오라클에서 case when 구문에 서브쿼리 사용 시 1

by 카스테라 [SQL Query] [2022.10.07 16:23:18]


MYSQL에서는 특별히 이슈가 없었는데, 오라클 쿼리에서 문제가 있는 것 같아 문의 드립니다.

상위부서코드가 유효하지 않은 부서코드라서 임의 값('A')으로 치환하는 쿼리를 사용하는데

기대대로 동작하지 않습니다. 

예를 들면 C라는 부서코드의 상위부서코드가 D->A라는 부서코드로 치환되지 않습니다..

dept_code parent_code
A  
B A
C D

 

 

select 
    deptcode,
    case when parent_code not in (select deptcode from dept_info) then 'A'
    else parent_code end as parent_code 
from 
    dept_info

 

by pajama [2022.10.07 21:20:06]

저는 오라클 11g에서 테스트해봤는데 실행되네요.


by 우리집아찌 [2022.10.09 11:54:32]

select deptcode from dept_info + WHERE 조건 이 필요하지 않나요?


by 마농 [2022.10.11 12:32:45]
WITH dept_info AS
(
SELECT 'A' dept_code, null parent_code FROM dual
UNION ALL SELECT 'B', 'A' FROM dual
UNION ALL SELECT 'C', 'D' FROM dual
)
SELECT a.dept_code
     , CASE WHEN a.parent_code IS NULL THEN NULL
            WHEN b.dept_code   IS NULL THEN 'A'
            ELSE a.parent_code END parent_code
  FROM dept_info a
  LEFT OUTER JOIN dept_info b
    ON a.parent_code = b.dept_code
;

 


by 카스테라 [2022.10.19 14:27:44]

왜 오라클만 다를까요? 타DBMS에서는 정상 수행되는 쿼리인데..


by 마농 [2022.10.19 14:49:00]

오라클만 다르지 않습니다.
오라클에서도 정상 수행됩니다.
위에 pajama 님도 정상 수행된다고 댓글 다셨네요.

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