Ecco tre modi per convertire l'array in righe. Utilizzando lo stesso valore JSON presunto:
SET @j = '[10, 20, {"a": "bbb"}]';
Usando la tabella dei numeri in linea. Compatibile con 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;
Utilizzo di MySQL 8.0.4+ JSON_TABLE():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Utilizzo di MariaDB SEQUENCE Engine per eliminare la tabella delle sequenze in linea:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
Per rendere più generico in MariaDB, utilizzare un massimo di "ipotesi migliore" per la lunghezza dell'array, quindi limitare la sequenza alla lunghezza JSON. Questo esempio presuppone che l'array più grande contenga 1024 elementi o meno:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);