Không có phương pháp trực tiếp nào để lấy các giá trị riêng biệt từ một mảng JSON trong MySQL. Một phương pháp có thể là sử dụng khái niệm bảng Trình tạo chuỗi / Số . Bảng tuần tự này có thể được sử dụng làm Bảng gốc (truy vấn con) hoặc bạn có thể tạo một bảng vĩnh viễn lưu trữ các số trong cơ sở dữ liệu của mình.
Sau đó, chúng tôi sẽ sử dụng bảng trình tự này để JSON_EXTRACT()
giá trị ra khỏi mảng ở khóa đầu tiên, khóa thứ hai, khóa thứ ba, v.v. Khi chúng tôi đã trích xuất các giá trị trong hàng riêng biệt, chúng tôi có thể chỉ cần sử dụng DISTINCT
để có được những giá trị độc đáo từ chúng. Sau đó, chúng tôi có thể sử dụng JSON_ARRAYAGG()
chức năng tổng hợp lại các giá trị duy nhất này trở lại dưới dạng một mảng JSON.
Giản đồ (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Truy vấn
SELECT Json_arrayagg(dt.val) AS unq_json_array
FROM (SELECT DISTINCT Json_extract(@json, Concat('$[', seq.n, ']')) AS val
FROM (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL
SELECT 8 UNION ALL SELECT 9) AS seq) AS dt
WHERE dt.val IS NOT NULL;
Kết quả
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |