sql >> Base de Datos >  >> RDS >> Mysql

Cómo obtener elementos únicos/distintos dentro de la matriz JSON en MySQL 5.7

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

Ver en DB Fiddle