Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL e JSON - transformar array em linhas


Aqui estão três maneiras de converter sua matriz em linhas. Usando o mesmo valor JSON assumido:

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

Usando tabela de números em linha. Compatível com MySQL e 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 o MariaDB SEQUENCE Engine para se livrar da tabela de sequência em linha:
SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_2;

Para tornar mais genérico no MariaDB, use um máximo de "melhor estimativa" para o comprimento da matriz e limite a sequência ao comprimento JSON. Este exemplo assume que o maior array terá 1024 ou menos elementos:
SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_1024 AS sequenceTable
WHERE
    sequenceTable.seq < JSON_LENGTH(@j);