Conozco la posibilidad de duplicidad de preguntas, pero no encontré nada que me ayude en mi situación al respecto.
Tengo este json en mi columna mysql:
[ { "ddi": "55", "routing_id": "7", "price": { "mt": 0.0285, "mo": 0.0285 } }, { "ddi": "598", "routing_id": "10", "price": { "mt": 0.06, "mo": 0.06 } } ]Cuando hago la siguiente consulta:
SELECT JSON_EXTRACT(my_column,'$[*].ddi') as ddi FROM my_tableobtengo el resultado:
["55", "598"]Mi pregunta es: ¿hay alguna forma de devolver estos datos en filas en lugar de una matriz json? Me gusta:
Ddi 55 598Puedes usar JSON_TABLE para lo mismo
SELECT get_ddi.* FROM my_table, JSON_TABLE(my_column, '$[*]' COLUMNS ( my_column VARCHAR(40) PATH '$.ddi') ) get_ddi; **Schema (MySQL v8.0)** DROP TABLE IF EXISTS `my_table`; CREATE TABLE IF NOT EXISTS `my_table` ( `id` SERIAL, `my_column` JSON ); INSERT INTO `my_table` (`id`, `my_column`) VALUES (1, '[ { "ddi": "55", "routing_id": "7", "price": { "mt": 0.0285, "mo": 0.0285 } }, { "ddi": "598", "routing_id": "10", "price": { "mt": 0.06, "mo": 0.06 } } ]'); **Query #1** SELECT get_ddi.* FROM my_table, JSON_TABLE(my_column, '$[*]' COLUMNS ( my_column VARCHAR(40) PATH '$.ddi') ) get_ddi; **Output** | my_column | | --------- | | 55 | | 598 | Según los comentarios de @Guilherme Mascarenhas a continuación, la solución necesaria era para MariaDb. A partir de la versión 10.2.31, la función JSON_TABLE no existe para MariaDB. Una solución hacky podría ser usar la tabla de secuencia mariadb apropiada (dependiendo de la cantidad de filas). JSON_UNQUOTE elimina la cita del valor extraído. seq se usa como índice para obtener el valor ddi especificado de la matriz.
SELECT JSON_UNQUOTE(JSON_EXTRACT(t.my_column, CONCAT('$[', seq_0_to_100.seq, '].ddi'))) AS getddi FROM my_table t JOIN seq_0_to_100 HAVING getddi IS NOT NULL; **Output** | my_column | | --------- | | 55 | | 598 |