특정 컬럼에 null값이 있을때 nvl조건 컨트롤에 관한 질문입니다. 1 3 1,918

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  
컴퓨터 데스크탑
컴퓨터 노트북
by 곤 [2022.08.19 14:40:26]

SELECT * FROM A_table WHERE NVL(Lev2 , 1) LIKE DECODE(:Lev2 , NULL, '%', :Lev2 )

이렇게 해결했습니다!

 

혹시 더 좋은 방법이 있으면 공유부탁드립니다~


by 창조의날개 [2022.08.19 16:55:38]
SELECT * 
FROM A_table 
WHERE :Lev2  IS NULL 
       OR (:Lev2 IS NOT NULL AND Lev2 =:Lev2)
;

좌변을 가공하지 않고 =로 비교해야 인덱스를 활용 하는데 좋습니다.


by 곤 [2022.08.19 17:13:49]

감사합니다! 배움이 되었습니다.

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