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);