Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere elementi univoci / distinti all'interno dell'array JSON in MySQL 5.7

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"] |

Visualizza su DB Fiddle