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