mysql 5.0에서 json 형태의 [ ] 안에 데이터가 고정적으로 3개일때는 결과를 구하는데
[ ] 안의 데이터가 유동적일때는 쉽사리 답이 나오지 않아서 질문 드립니다.
cntt : [{"id":100,"name":"사과"},{"id":101,"name":"바나나"},{"id":121,"name":"배"}]
SELECT JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[1].id')) AS id
,JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[1].name')) AS name
,JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[2].id')) AS id
,JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[2].name')) AS name
,JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[3].id')) AS id
,JSON_UNQUOTE(JSON_EXTRACT(cntt, '$[3].name')) AS name
FROM tb_tmp;
id | name |
100 | 사과 |
101 | 바나나 |
102 | 배 |
json 형태의 데이터가 [ ] 에 고정적으로 3개일때는 위와 같이 하면 되는데
[ ] 안에 유동적으로 몇개가 있는지 알수 없는 경우에 결과를 구하는 방법에 도움을 부탁드립니다.
감사합니다.
WITH tb_tmp AS ( SELECT '[{"id":100,"name":"사과"},{"id":101,"name":"바나나"},{"id":121,"name":"배"},{"id":123,"name":"감"}]' cntt ) , copy_t AS ( SELECT 0 no UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) SELECT b.no , JSON_EXTRACT(a.cntt, CONCAT('$[', b.no, '].id')) id , JSON_UNQUOTE(JSON_EXTRACT(a.cntt, CONCAT('$[', b.no, '].name'))) name FROM tb_tmp a INNER JOIN copy_t b ON b.no < JSON_LENGTH(a.cntt) ;
MySQL 8.0 이라면 JSON_TABLE() 사용이 가능할 듯 합니다.