Hier sind drei Möglichkeiten, Ihr Array in Zeilen umzuwandeln. Unter Verwendung desselben angenommenen JSON-Werts:
SET @j = '[10, 20, {"a": "bbb"}]';
Verwendung von Inline-Zahlentabellen. MySQL- und 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;
Verwendung von MySQL 8.0.4+ JSON_TABLE():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Verwendung der MariaDB SEQUENCE Engine, um die Inline-Sequenztabelle zu entfernen:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
Um in MariaDB generischer zu werden, verwenden Sie ein Maximum für die Array-Länge, das am besten geschätzt wird, und begrenzen Sie die Sequenz dann auf die JSON-Länge. Dieses Beispiel geht davon aus, dass das größte Array 1024 oder weniger Elemente hat:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);