Här är tre sätt att konvertera din array till rader. Använder samma antagna JSON-värde:
SET @j = '[10, 20, {"a": "bbb"}]';
Använder in-line tabell med siffror. MySQL och MariaDB-kompatibla:
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;
Använder MySQL 8.0.4+ JSON_TABLE():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Använda MariaDB SEQUENCE Engine för att bli av med in-line sekvenstabell:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
För att göra mer generiskt i MariaDB, använd en "bästa gissning" max för arraylängden och begränsa sedan sekvensen till JSON-längden. Det här exemplet antar att den största arrayen kommer att ha 1024 eller färre element:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);