Der er ingen direkte metode til at få distinkte værdier ud af et JSON-array i MySQL. En metode kunne være at bruge et sekvens-/talgeneratortabelkoncept . Denne sekvenstabel kan bruges som en afledt tabel (underforespørgsel), eller du kan oprette en permanent tabel med numre i din database.
Vi vil derefter bruge denne sekvenstabel til at JSON_EXTRACT()
værdier ud fra array ved første nøgle, anden nøgle, tredje nøgle og så videre. Når vi har udtrukket værdierne i en separat række, kan vi blot bruge DISTINCT
at få unikke værdier ud af dem. Bagefter kan vi bruge JSON_ARRAYAGG()
funktion til at samle disse unikke værdier tilbage som et JSON-array.
Skema (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Forespørgsel
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"] |