Tidak ada metode langsung untuk mendapatkan nilai yang berbeda dari array JSON di MySQL. Salah satu metodenya adalah dengan menggunakan konsep tabel Sequence/Number Generator . Tabel urutan ini dapat digunakan sebagai Tabel Turunan (subquery), atau Anda dapat membuat tabel permanen yang menyimpan angka di database Anda.
Kami kemudian akan menggunakan tabel urutan ini untuk JSON_EXTRACT()
nilai keluar dari array pada kunci pertama, kunci kedua, kunci ketiga dan seterusnya. Setelah kami mengekstrak nilai di baris terpisah, kami cukup menggunakan DISTINCT
untuk mendapatkan nilai-nilai unik dari mereka. Setelah itu, kita dapat menggunakan JSON_ARRAYAGG()
berfungsi untuk menggabungkan kembali nilai-nilai unik ini sebagai larik JSON.
Skema (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Kueri
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;
Hasil
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |