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