Nie ma bezpośredniej metody uzyskiwania odrębnych wartości z tablicy JSON w MySQL. Jedną z metod może być wykorzystanie koncepcji tabeli Sequence/Number Generator . Ta tabela sekwencji może być używana jako tabela pochodna (podzapytanie) lub możesz utworzyć stałą tabelę przechowującą liczby w twojej bazie danych.
Następnie użyjemy tej tabeli sekwencji do JSON_EXTRACT()
wartości z tablicy w pierwszym kluczu, drugim kluczu, trzecim kluczu i tak dalej. Po wyodrębnieniu wartości w osobnym wierszu możemy po prostu użyć DISTINCT
aby wydobyć z nich unikalne wartości. Następnie możemy użyć JSON_ARRAYAGG()
funkcja do ponownego agregowania tych unikalnych wartości z powrotem w postaci tablicy JSON.
Schemat (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Zapytanie
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;
Wynik
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |