J'ai mysql 5.7 avec une table dénormalisée qui a quelques colonnes JSON. J'ai besoin d'extraire des valeurs uniques/distinctes par ligne pour une colonne de tableau.
Par exemple: ["a", "b", "b", "a", "c"]
la sortie attendue doit être ["a", "b", "c"];
SET @json = '["a", "b", "b", "a", "c"]';
J'ai besoin d'obtenir des valeurs uniques dans cette liste.
["a", "b", "c"];
Les éléments suivants peuvent aider ceux qui utilisent MySQL 8
Vous pouvez utiliser une combinaison de JSON_TABLE
, JSON_OBJECTAGG
Et JSON_KEYS
Pour le faire sans trop de problèmes. C'est dommage que nous ne puissions pas faire quelque chose comme JSON_ARRAYAGG(DISTINCT item)
.
Par exemple:
SET @json = '["a", "b", "b", "a", "c"]';
SELECT JSON_KEYS(JSON_OBJECTAGG(item, ""))
FROM JSON_TABLE(@json, '$[*]'
COLUMNS(
item TEXT PATH '$'
)
) as items;
J'ai également créé un DBFiddle pour montrer mon travail: https://www.db-fiddle.com/f/6hgSEXPJWcm2CH8K16z6gQ/
JSON_TABLE https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html
Fonctions de recherche JSON: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html