[postgres] 문자열로 저장된 값으로 where ~ in 조회

22_gas·2024년 6월 21일

특정 테이블에 아래의 형태로 데이터가 저장되어있다고 가정하자

[결제 테이블]: sales

cnt(int)total(int)product_id(string)
220001,2
4120003,4,5,6

[제품 테이블]: product

product_id(int)product_name(str)price(int)
1a1000
2b1000
3c3000
4d3000
5e3000
6f3000

아래의 쿼리로 조회하게 되는데 

SELECT *
  FROM sales
pricecnttotalproduct_idproduct_name
1000220001,2a,b
30004120003,4,5,6c,d,e,f

로 product_name를 조회하거나 json형태로 조회해야 하는 상황이 발생했다.

product_id의 문자열을 ','로 split하여 where 조건의 in절에 넣어야 한다.  그럴떄 아래의 쿼리로 작성이 가능하다.

STRING_TO_ARRAY()와 ANY()를 사용하면된다.

SELECT PRODUCT_NAME
  FROM PRODUCT 
 WHERE PRODUCT_ID = ANY(STRING_TO_ARRAY('1,2,3,4,5,6', ',')::INT[])

조회가 잘된다.... 

이제 쿼리문으로 조회하는 걸로 바꿔보도록 하자 

SELECT A.*
      , (SELECT STRING_AGG(PRODUCT_NAME) FROM PRODUCT_ID = ANY(STRING_TO_ARRAY(A.PRODUCT_ID, ',')))
  FROM SALES A

끗!

profile
전 아직 모르는게 많아요

0개의 댓글