Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите уникални/отличителни елементи в JSON масив в MySQL 5.7

Няма директен метод за извличане на различни стойности от 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"] |

Преглед на DB Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да използвам едновременен достъп до таблицата mysql в PHP

  2. php mysql - трябва ли да добавя името на категорията на полето към таблица или не?

  3. Вмъкнете 0 или 1 в MySQL въз основа на стойността на квадратчето за отметка

  4. компресирайте текста, преди да го съхраните в базата данни на mysql

  5. Защо моето .NET уеб приложение API не се свързва с MySQL на docker, когато използвам docker-compose?