sql >> Database >  >> RDS >> Mysql

Hoe unieke / onderscheidende elementen in de JSON-array te krijgen in MySQL 5.7

Er is geen directe methode om verschillende waarden uit een JSON-array in MySQL te halen. Een methode zou kunnen zijn om een Sequence/Number Generator-tabelconcept te gebruiken . Deze sequentietabel kan worden gebruikt als een afgeleide tabel (subquery), of u kunt een permanente tabel maken waarin getallen in uw database worden opgeslagen.

We zullen dan deze sequentietabel gebruiken om JSON_EXTRACT() waarden uit de array bij de eerste sleutel, tweede sleutel, derde sleutel enzovoort. Zodra we de waarden in een aparte rij hebben geëxtraheerd, kunnen we eenvoudig DISTINCT . gebruiken om er unieke waarden uit te halen. Daarna kunnen we JSON_ARRAYAGG() functie om deze unieke waarden opnieuw samen te voegen als een JSON-array.

Schema (MySQL v5.7)

SET @json = '["a", "b", "b", "a", "c"]';

Zoekopdracht

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;

Resultaat

| unq_json_array  |
| --------------- |
| ["a", "b", "c"] |

Bekijken op DB Fiddle



  1. Prestatieverschillen tussen gelijk (=) en IN met één letterlijke waarde

  2. Van buitenaf verbinding maken met Postgresql in een docker-container

  3. verkrijg de SUM van elke persoon door de PersonID

  4. Probleem met mysqldump:--defaults-extra-file optie werkt niet zoals verwacht