Non esiste un metodo diretto per ottenere valori distinti da un array JSON in MySQL. Un metodo potrebbe essere quello di utilizzare un concetto di tabella Sequence/Number Generator . Questa tabella di sequenza può essere utilizzata come tabella derivata (sottoquery) oppure puoi creare una tabella permanente che memorizza i numeri nel tuo database.
Useremo quindi questa tabella di sequenza per JSON_EXTRACT()
valori fuori dall'array alla prima chiave, seconda chiave, terza chiave e così via. Dopo aver estratto i valori in una riga separata, possiamo semplicemente usare DISTINCT
per ricavarne valori unici. Successivamente, possiamo utilizzare JSON_ARRAYAGG()
funzione per riaggregare questi valori univoci come una matrice JSON.
Schema (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Richiesta
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;
Risultato
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |