Xin lỗi vì tính năng cân bằng điện tử, nhưng tôi đã gặp phải vấn đề tương tự. Giải pháp là:JSON_TABLE()
có sẵn kể từ MySQL 8.0.
Đầu tiên, hợp nhất các mảng trong hàng thành mảng đơn một hàng.
select concat('[', -- start wrapping single array with opening bracket
replace(
replace(
group_concat(vals), -- group_concat arrays from rows
']', ''), -- remove their opening brackets
'[', ''), -- remove their closing brackets
']') as json -- finish wraping single array with closing bracket
from (
select '[801, 751, 603, 753, 803]' as vals
union select '[801, 751]'
union select '[578, 66, 15]'
) as jsons;
# gives: [801, 751, 603, 753, 803, 801, 751, 578, 66, 15]
Thứ hai, sử dụng json_table
để chuyển mảng thành hàng.
select val
from (
select concat('[',
replace(
replace(
group_concat(vals),
']', ''),
'[', ''),
']') as json
from (
select '[801, 751, 603, 753, 803]' as vals
union select '[801, 751]'
union select '[578, 66, 15]'
) as jsons
) as merged
join json_table(
merged.json,
'$[*]' columns (val int path '$')
) as jt
group by val;
# gives...
801
751
603
753
803
578
66
15
Xem https:// dev. mysql.com/doc/refman/8.0/en/json-table-functions.html#osystem_json-table
Lưu ý nhóm group by val
để nhận các giá trị khác biệt. Bạn cũng có thể order
họ và mọi thứ ...
Hoặc bạn có thể sử dụng group_concat(distinct val)
không có nhóm group by
chỉ thị (!) để nhận kết quả một dòng.
Hoặc thậm chí cast(concat('[', group_concat(distinct val), ']') as json)
để có được một mảng json thích hợp:[15, 66, 578, 603, 751, 753, 801, 803]
.
Đọc Các phương pháp hay nhất để sử dụng MySQL làm bộ nhớ JSON của tôi :)