by 곤 [SQL Query] null 컬럼 조건 nvl [2022.08.19 14:01:20]
A_table에 대해서 파라미터로 받은 변수를 조건으로 컨트롤 하는 도중 발생한 문제입니다.
A_table :
Lev1 | Lev2 |
가구 | 의자 |
가구 | 책상 |
에어컨 | |
TV | |
컴퓨터 | 데스크탑 |
컴퓨터 | 노트북 |
이렇게 구성되어 있는 테이블에서
파라미터 => :Lev2 = null
SQL : SELECT * FROM A_table WHERE Lev2 = NVL(:Lev2, Lev2)
이렇게 한 결과
Lev1 | Lev2 |
가구 | 의자 |
가구 | 책상 |
에어컨 | |
TV | |
컴퓨터 | 데스크탑 |
컴퓨터 | 노트북 |
이렇게 기존의 테이블 값과 동일하게 모든 레코드를 출력하고 싶습니다.
하지만 nvl을 사용하여 null값을 체크하면 기존에 Lev2이 있는 값들만 비교를 하기 때문에 실질적으로
Lev1 | Lev2 |
가구 | 의자 |
가구 | 책상 |
컴퓨터 | 데스크탑 |
컴퓨터 |
노트북 |
이런 결과값이 나와버립니다.
결론 : A_table 테이블을 조회할때 파라미터 :Lev2가 NULL일때는 NULL값 유무와 상관없이 기존의 모든 레코드가 출력되게 하고 싶습니다.
-------------------------------------------------------------------------------------------------------------------------------------------------------
아래의 결과처럼 나오게 하고싶습니다.
:Lev2 = 책상
SELECT * FROM A_table WHERE Lev2 = NVL(:Lev2, Lev2)
Lev1 | Lev2 |
가구 | 책상 |
:Lev2 = null
SELECT * FROM A_table WHERE Lev2 = NVL(:Lev2, Lev2)
Lev1 | Lev2 |
가구 | 의자 |
가구 | 책상 |
에어컨 | |
TV | |
컴퓨터 | 데스크탑 |
컴퓨터 | 노트북 |