DB쿼리를 짤때 값이 없을 경우에는 디폴트 값을 보여줘야하는 시나리오가 종종 나오게 된다.
그럴경우에 한번에 초기 테이블을 만들때 다음과 같은 방법으로 해볼 수 있다.
아래의 테이블 내용은 STR_ID 별로 물품 카테고리와 물품들 리스트를 보관하는 테이블의 데이터 모습이다.
여기서 특정 STD_ID에 해당하는 카테고리/물품 내용이 저장되어 있지 않을 경우 디폴트 STR_ID = 0인 값들로 무언가 해보고자 한다면 과연 어떻게 초기 테이블을 가져갈 수 있을까?
UNION ALL을 활용해 값이 없을때의 STR_ID = 0 인 조회결과와 실제 원하는 값이 있을때의 테이블 결과를 UNION ALL 하면 위 시나리오 대로 실행을 해볼 수 있다.
아래와 같이 조회를 원하고자 하는 STR_ID = 3에 해당하는 값이 없을 경우에 다음과 같이 서브쿼리를 만들고
SELECT *
FROM QUEUE_PRODUCT_INFO QI
WHERE QI.STR_ID = 0 AND NOT EXISTS (
SELECT *
FROM QUEUE_PRODUCT_INFO QA
WHERE QA.STR_ID = 3
)
여기에 실제 매장의 쿼리 결과
SELECT *
FROM QUEUE_PRODUCT_INFO QA
WHERE QA.STR_ID = 3
위 둘을 UNION ALL로 붙여 주는것이다.
아래결과는 존재하는 STR_ID = 3에 대해서 조회를 해본것이다.
WITH CATEGORY_TEMPLATE AS (
SELECT *
FROM QUEUE_PRODUCT_INFO QI
WHERE QI.STR_ID = 0 AND NOT EXISTS (
SELECT *
FROM QUEUE_PRODUCT_INFO QA
WHERE QA.STR_ID = 3
)
UNION ALL
SELECT *
FROM QUEUE_PRODUCT_INFO QA
WHERE QA.STR_ID = 3
)
SELECT *
FROM CATEGORY_TEMPLATE
3번 내용이 존재하므로 아래와 같이 STR_ID = 3에 대한 내용만 출력이 된다.
이제 본 문서의 목적인 현재 존재하지 않는 값에 대해서 디폴트 템플릿을 출력하는것을 확인하기 위해 아래와 같이 100번 STR_ID를 쿼리에 넣어본다.
WITH CATEGORY_TEMPLATE AS (
select *
from queue_product_info qi
where qi.str_id = 0 and not exists (
select *
from queue_product_info qa
where qa.str_Id = 100
)
UNION ALL
select *
from queue_product_info qa
where qa.str_Id = 100
)
SELECT *
FROM CATEGORY_TEMPLATE
아래와 같이 없는 경우에는 STR_ID = 0 에 해당하는 내용이 나오게 된다.
요청 항목에 대해서 값이 있는 경우는 그 값을 쓰고 없을 경우 디폴트 템플릿을 써야하는 패턴이라면 위와 같이 손쉽게 쿼리로 구성해볼 수 있다.
-- The End --
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 기본 명령어 #1 (0) | 2022.03.08 |
---|---|
[Oracle] first_value 함수 사용하기 (0) | 2022.01.18 |
[Oracle] 파티션 별 순번 매기기 ROW_NUMBER (0) | 2022.01.12 |
[Oracle] Insert, Update 판단을 한번에... Merge into 구문 살펴보기 (0) | 2022.01.12 |
[Oracle] Sqldeveloper로 ERD 출력하기 (0) | 2022.01.03 |