Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter elementos exclusivos / distintos dentro do array JSON no MySQL 5.7


Não existe um método direto para obter valores distintos de uma matriz JSON no MySQL. Um método pode ser utilizar um conceito de tabela Gerador de sequência/número . Esta tabela de seqüência pode ser usada como uma Tabela Derivada (subconsulta), ou você pode criar uma tabela permanente armazenando números em seu banco de dados.

Em seguida, usaremos essa tabela de sequência para JSON_EXTRACT() valores da matriz na primeira chave, segunda chave, terceira chave e assim por diante. Uma vez que extraímos os valores em uma linha separada, podemos simplesmente usar DISTINCT para obter valores únicos deles. Depois, podemos usar JSON_ARRAYAGG() função para reagregar esses valores exclusivos de volta como uma 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 no DB Fiddle