配列を行に変換する3つの方法があります。同じ想定JSON値を使用する:
SET @j = '[10, 20, {"a": "bbb"}]';
数値のインラインテーブルを使用します。 MySQLと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;
MySQL 8.0.4+ JSON_TABLE()の使用:
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
MariaDB SEQUENCEエンジンを使用してインラインシーケンステーブルを削除します:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
MariaDBでより一般的にするには、配列の長さに「最良の推測」の最大値を使用してから、シーケンスをJSONの長さに制限します。この例では、最大の配列の要素が1024以下であると想定しています。
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);