Her er tre måder at konvertere dit array til rækker. Bruger den samme antagne JSON-værdi:
SET @j = '[10, 20, {"a": "bbb"}]';
Brug af in-line taltabel. MySQL og MariaDB-kompatibel:
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;
Bruger MySQL 8.0.4+ JSON_TABLE():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Brug af MariaDB SEQUENCE Engine til at slippe af med in-line sekvenstabel:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
For at gøre mere generisk i MariaDB, brug et "bedste gæt" max for array længden og begræns derefter sekvensen til JSON længde. Dette eksempel antager, at det største array vil have 1024 eller færre elementer:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);