Dưới đây là ba cách để chuyển mảng của bạn thành hàng. Sử dụng cùng một giá trị JSON giả định:
SET @j = '[10, 20, {"a": "bbb"}]';
Sử dụng bảng số nội dòng. Tương thích MySQL và 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;
Sử dụng MySQL 8.0.4+ JSON_TABLE ():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Sử dụng Công cụ MariaDB SEQUENCE để loại bỏ bảng trình tự nội dòng:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
Để làm cho tổng thể hơn trong MariaDB, hãy sử dụng giá trị tối đa "dự đoán tốt nhất" cho độ dài mảng, sau đó giới hạn trình tự ở độ dài JSON. Ví dụ này giả sử mảng lớn nhất sẽ có 1024 phần tử trở xuống:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);