티스토리 뷰

 

🔷 PostgreSQL에서 배열을 풀어서 각 요소를 행으로 만드는 함수 unnest

 

컬럼에 여러값이 들어가있는 경우, 어떻게 SQL로 뽑아낼 것인가?

이게 자바스크립트 등으로 하면 그냥 결과값 가져와서 ,로 자르고 배열에 집어넣고 돌리면서 하면 편한데

SQL로 하려고 하니 어려웠다.

 


 

상황 설명 :

A테이블에는 질문에 대한 답이 들어있다. [객관식 복수선택 가능]

B테이블에는 실제로 대답한 답이 들어있다.

 

answers에 있는 답을 A테이블에서 가져와야 했다.

 

A테이블

 
idx
q_num [ int 타입 ]
q_name
1
151
151번에 대한 답변
1
152
152번에 대한 답변
1
153
153번에 대한 답변
1
154
154번에 대한 답변

 

B테이블

 
idx
answers [ varchar 타입 ]
1
151, 152
1
152
1
151,152,153
1
153,154

 

 

SELECT a.idx , a.q_num , q_name
FROM A a
LEFT JOIN B b ON CAST(a.q_num AS character varying) IN (
  SELECT DISTINCT UNNEST(string_to_array(b.answers, ','))
)
where a.idx = 1;
 
 

일단 a.q_num과 b.answers의 타입이 달라 타입을 변경해주고

PostgreSQL에서 배열을 풀어서 각 요소를 행으로 만드는 함수 unnest사용하면

예쁘게 행으로 잘 뽑힘!