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
저는 오라클 11g에서 테스트해봤는데 실행되네요.
select deptcode from dept_info + WHERE 조건 이 필요하지 않나요?
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
;
왜 오라클만 다를까요? 타DBMS에서는 정상 수행되는 쿼리인데..
오라클만 다르지 않습니다.
오라클에서도 정상 수행됩니다.
위에 pajama 님도 정상 수행된다고 댓글 다셨네요.