DB
[postgreSQL] 컬럼에 여러값이 들어가 있는 경우, 문자열 분리 후 행으로 가져오기 unnest(string_to_array )
페루나쵸
2023. 10. 18. 14:54
🔷 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사용하면
예쁘게 행으로 잘 뽑힘!