Il n'existe pas de méthode directe pour obtenir des valeurs distinctes à partir d'un tableau JSON dans MySQL. Une méthode pourrait consister à utiliser un concept de table Sequence/Number Generator . Cette table de séquence peut être utilisée comme table dérivée (sous-requête), ou vous pouvez créer une table permanente stockant les nombres dans votre base de données.
Nous utiliserons ensuite cette table de séquence pour JSON_EXTRACT()
valeurs du tableau à la première clé, la deuxième clé, la troisième clé et ainsi de suite. Une fois que nous avons extrait les valeurs dans une ligne séparée, nous pouvons simplement utiliser DISTINCT
pour en tirer des valeurs uniques. Ensuite, nous pouvons utiliser JSON_ARRAYAGG()
pour réagréger ces valeurs uniques sous forme de tableau JSON.
Schéma (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Requête
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;
Résultat
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |