Aplanar objeto JSON en MYSQL
Tengo una tabla con 1 columna y filas como:
Row- {'category': ['mobiles'], 'specs': ['4g', '2gb ram']}
Row- {'category': ['computer'], 'specs': ['2gb ram']}
Quiero aplanar los datos en 2 columnas.
category, mobiles
specs, 4g
specs, 2gb ram
category, computer
specs, 2gb ram
Probé esto
SELECT `key`,`value`
FROM table_name
CROSS JOIN JSON_TABLE(
column_name,
'$.*' COLUMNS (
`key` TEXT PATH '$',
NESTED PATH '$[*]' COLUMNS (
`value` VARCHAR(255) PATH '$'
)
)
) AS jt;
Pero la columna clave siempre es nula.
Aceptado
SELECT jsonkeystable.keyname,
jsonvaluestable.value
FROM test
CROSS JOIN JSON_TABLE(
JSON_KEYS(test.jsondata),
'$[*]' COLUMNS (
keyid FOR ORDINALITY,
keyname VARCHAR(64) PATH '$'
)
) jsonkeystable
CROSS JOIN JSON_TABLE(
JSON_EXTRACT(test.jsondata, CONCAT('$.', jsonkeystable.keyname)),
'$[*]' COLUMNS (
valueid FOR ORDINALITY,
value VARCHAR(64) PATH '$'
)
) jsonvaluestable
ORDER BY test.id, jsonkeystable.keyid, jsonvaluestable.valueid
Nombre clave | valor |
---|---|
especificaciones | 4g |
especificaciones | 2gb de ram |
categoría | móviles |
especificaciones | 2gb de ram |
categoría | computadora |
Violín paso a paso con algunos comentarios.
PD. Ajuste el orden de las filas con la cláusula ORDER BY adecuada.