В MySQL нет прямого метода для получения различных значений из массива JSON.Одним из способов может быть использование концепции таблицы генератора последовательностей / чисел .Эта таблица последовательности может использоваться как производная таблица (подзапрос), или вы можете создать постоянную таблицу для хранения чисел в вашей базе данных.
Затем мы будем использовать эту таблицу последовательности для JSON_EXTRACT()
значения из массива в первый ключ, второй ключ, третий ключ и так далее.После того, как мы извлекли значения в отдельной строке, мы можем просто использовать DISTINCT
, чтобы извлечь из них уникальные значения.После этого мы можем использовать функцию JSON_ARRAYAGG()
для повторного агрегирования этих уникальных значений обратно в массив JSON.
Схема (MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Запрос
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;
Результат
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |
Просмотр на БД Fiddle