No existe un método directo para obtener valores distintos de una matriz JSON en MySQL. Un método podría ser utilizar un concepto de tabla de generador de números/secuencias . Esta tabla de secuencia podría usarse como una tabla derivada (subconsulta), o puede crear una tabla permanente que almacene números en su base de datos.
Luego usaremos esta tabla de secuencias para JSON_EXTRACT()
valores fuera de la matriz en la primera clave, segunda clave, tercera clave y así sucesivamente. Una vez que hemos extraído los valores en filas separadas, simplemente podemos usar DISTINCT
para obtener valores únicos de ellos. Luego, podemos usar JSON_ARRAYAGG()
función para volver a agregar estos valores únicos como una matriz JSON.
Esquema (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Consulta
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;
Resultado
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |