ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • sql 특수 상태 검색(조건 상태 검색)에 관한 글
    데이터베이스 2022. 8. 7. 18:22

    목록에서 상태를 조건 검색해야 되는 상황.

     

    여기서 단순히 status 칼럼 값만 검색을 하면 단순히 in 절로 검색을 하면 해결이 된다.

     

    하지만 상태를 검색하는데 

     

    단순히 status만 검색을 하는 것이 아니라 다른 테이블의 상태 값과, 

     

    특정 상태인 경우 상태값과 날짜 체크를 같이 해야 되는 경우가 있어 

     

    처음 해당 사항을 진행하려고 할때 고민을 하게 되었다.

     

     

    그래서 아무 생각없이 하려고 할때는 

     

    (a.status = 'A' and b.order_status = 'B')  -- 1

    or (a.status = 'A' and b.order_status = 'C') -- 2

     

    여기서 1 번과 2번이 목록에서는 필터하려고 하는 상태조건에 따라

    1번을 할수도 있고, 2번만 검색하려고 할 수도 있다.

     

    이런식으로 하게되면 문제가 위 상황처럼 1, 2 다 실행하는 경우는 문제가 없지만

     

    2만 검색하려고 하면 

    or (a.status = 'A' and b.order_status = 'C') << 여기서 보이는 or 는 없어야

    정상적으로 sql 이 동작을 하게 되어

     

    저 or 도 동적으로 하려고 하는것도 같이 구현을 하는것이 문제가 되었다.

     

    그래서 고민해본 결과,

     

    in 절도 사용하고, 재활용성도 높여서 사용하기 위해

     

    select 절에서 case 문으로 (해당 정확한 쿼리 문은 생략)

    ((a.status = 'A' and b.order_status = 'B') then 'AA'

    (a.status = 'A' and b.order_status = 'C') then 'AC'

     ) as displayStatus

     

    로 만들어서 다른 상황에서도 displayStatus 를 사용할 수 있도록 하고 

    이렇게 만들어 보면

     

    위에서 언급했던 문제를 해결한

    displayStatus in ('AA', 'AC') 나 displayStatus in ('AC')

     

    이런 케이스 등에서도 해결할 수 있었다.

     

    알고 보면 간단하고 평소에 select에서 case문을 많이 사용하였지만

    이렇게 응용해서 사용하는것이 중요하는 생각이 들기도 했다.

    '데이터베이스' 카테고리의 다른 글

    트랜잭션 격리 수준(Isolation level)  (0) 2023.02.26
    170911_TIL  (0) 2017.09.12
    170904_TIL  (0) 2017.09.12
Designed by Tistory.