sql >> Base de Datos >  >> RDS >> Mysql

MySQL y JSON:transforma la matriz en filas

Aquí hay tres formas de convertir su matriz en filas. Usando el mismo valor JSON asumido:

SET @j = '[10, 20, {"a": "bbb"}]';

Uso de la tabla de números en línea. Compatibilidad con MySQL y MariaDB:

WITH sequenceGenerator (sequenceNumber) AS (
    SELECT 0 AS sequenceNumber
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 2
)
SELECT
    JSON_EXTRACT(@j, CONCAT('$[', sequenceNumber, ']')) AS arrayValue
FROM
    sequenceGenerator;

Usando MySQL 8.0.4+ JSON_TABLE():

SELECT
    arrayValue
FROM
    JSON_TABLE(
        @j,
         '$[*]'
        COLUMNS(
            arrayValue JSON PATH '$')
    ) AS tt;

Usando MariaDB SEQUENCE Engine para deshacerse de la tabla de secuencias en línea:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_2;

Para hacerlo más genérico en MariaDB, use un máximo de "mejor suposición" para la longitud de la matriz y luego limite la secuencia a la longitud JSON. Este ejemplo asume que la matriz más grande tendrá 1024 o menos elementos:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_1024 AS sequenceTable
WHERE
    sequenceTable.seq < JSON_LENGTH(@j);