Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir des éléments uniques / distincts dans le tableau JSON dans MySQL 5.7

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

Voir sur DB Fiddle