Няма директен метод за извличане на различни стойности от JSON масив в MySQL. Един от методите може да бъде използване на концепция на таблица за генериране на последователност/число . Тази таблица с последователности може да се използва като извлечена таблица (подзаявка) или можете да създадете постоянна таблица, съхраняваща числа във вашата база данни.
След това ще използваме тази таблица с последователности, за да JSON_EXTRACT()
стойности от масива на първи ключ, втори ключ, трети ключ и така нататък. След като извлечем стойностите в отделен ред, можем просто да използваме DISTINCT
за да извлечете уникални стойности от тях. След това можем да използваме JSON_ARRAYAGG()
функция за повторно агрегиране на тези уникални стойности обратно като JSON масив.
Схема (MySQL v5.7)
SET @json ='["a", "b", "b", "a", "c"]';
Запитване
ИЗБЕРЕТЕ Json_arrayagg(dt.val) КАТО unq_json_arrayFROM (ИЗБЕРЕТЕ DISTINCT Json_extract(@json, Concat('$[', seq.n, ']')) КАТО val FROM (ИЗБЕРЕТЕ 0 КАТО 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 dtWHERE dt.val НЕ Е NULL;
Резултат
<предварителен код>| unq_json_array || --------------- || ["a", "b", "c"] |