Det finns ingen direkt metod för att få ut distinkta värden ur en JSON-array i MySQL. En metod kan vara att använda ett tabellkoncept för sekvens/nummergenerator . Denna sekvenstabell kan användas som en härledd tabell (underfråga), eller så kan du skapa en permanent tabell som lagrar nummer i din databas.
Vi kommer sedan att använda den här sekvenstabellen för att JSON_EXTRACT()
värden ut från array vid första nyckel, andra nyckel, tredje nyckel och så vidare. När vi har extraherat värdena i separata rader kan vi helt enkelt använda DISTINCT
för att få ut unika värden ur dem. Efteråt kan vi använda JSON_ARRAYAGG()
funktion för att återaggregera dessa unika värden tillbaka som en JSON-array.
Schema (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Fråga
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;
Resultat
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |