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

Sådan får du unikke / særskilte elementer inde i JSON-arrayet i MySQL 5.7

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

Se på DB Fiddle



  1. Session_start Brugerprofildetaljer

  2. percentiler fra histogramdata

  3. Vælg rækker mellem en specificeret række til en række med en bestemt betingelse

  4. Laravel 5.1 - Kontrol af en databaseforbindelse