Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL et JSON - transformer le tableau en lignes

Voici trois façons de convertir votre tableau en lignes. Utilisation de la même valeur JSON supposée :

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

Utilisation d'un tableau de nombres en ligne. Compatibilité MySQL et 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;

Utilisation de MySQL 8.0.4+ JSON_TABLE() :

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

Utilisation de MariaDB SEQUENCE Engine pour se débarrasser de la table de séquence en ligne :

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

Pour rendre plus générique dans MariaDB, utilisez une "meilleure estimation" max pour la longueur du tableau, puis limitez la séquence à la longueur JSON. Cet exemple suppose que le plus grand tableau aura 1024 éléments ou moins :

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