안녕하세요.
case절을 where 조건에 넣었을때 이해가 안가는.. 부분이 있어서 질문 하게 되었습니다.
[SQL]
(1) select * from dual
where (case when 1 > 2 then (select count(*) from dual) else 0 end ) > 0;
결과값 : X
(수장) 결과값 : X (1 Row)
(2) select * from dual
where (case when 1 > 2 then (select count(*) from dual) else 0 end ) > 1;
결과값 : null
(수정) 결과값 : 선택된 레코드가 없습니다.
(3) select * from dual
where (case when 1 > 2 then (select count(*) from dual) else 0 end ) =1;
결과값 : null
(수정) 결과값 : 선택된 레코드가 없습니다.
(4) select * from dual
where (case when 1 > 2 then (select count(*) from dual) else 0 end ) = 0;
결과값 : null
(수정) 결과값 : 선택된 레코드가 없습니다.
(5) select * from dual
where (case when 1 > 2 then 1 else 0 end ) > 0;
결과값 : null
(수정) 결과값 : 선택된 레코드가 없습니다.
[질문]
(select count(*) from dual) 의 값은 1 이고,
case문에 1>2는 false이기 떄문에 else 로 가야되는데... 왜 (1),(2),(3),(4) 번의 결과값들이 저렇게 나오는지 이해가 안가네요.. (5)번은 결과값이 잘나오고 있습니다.
결국, (select count(*) from dual) 문을 넣으면 값이 생각한데로 안나오네요
제가 case문의 의미를 잘못이해 하고 있는건지...
고수님들 (1),(2),(3),(4) 번이 왜 저렇게 나오는지 구조,원리 설명 부탁드립니다.
---------------------- 추 가 ------------------
마농님 말씀하신데로 제가 표현을 잘못해서
1 Row , 0 Row 구분해서 결과값을 다시 적었습니다.
제 버전은
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 입니다.
저만 결과값이 다른 이유는.. 버전오류 인가요..? ㅜ
테스트를 어디서 하셨나요? 결과값이 저랑 틀린데요.
4번 SQL 빼놓고는 결국 0 (CASE 문 결과 ) 과 비교(틀리게)하는 값들인데 어떤게 문제인것이지요?
[SQL] (1) select * from dual where (case when 1 > 2 then (select count(*) from dual) else 0 end ) > 0; 결과값 : 선택된 행 없음 (2) select * from dual where (case when 1 > 2 then (select count(*) from dual) else 0 end ) > 1; 결과값 : 선택된 행 없음 (3) select * from dual where (case when 1 > 2 then (select count(*) from dual) else 0 end ) =1; 결과값 : 선택된 행 없음 (4) select * from dual where (case when 1 > 2 then (select count(*) from dual) else 0 end ) = 0; D - X (5) select * from dual where (case when 1 > 2 then 1 else 0 end ) > 0; 결과값 : 선택된 행 없음