sql >> Databáze >  >> RDS >> Mysql

Jak získat jedinečné / odlišné prvky uvnitř pole JSON v MySQL 5.7

Neexistuje žádná přímá metoda, jak získat odlišné hodnoty z pole JSON v MySQL. Jednou z metod by mohlo být použití konceptu tabulky generátoru sekvencí/čísel . Tato sekvenční tabulka může být použita jako odvozená tabulka (poddotaz), nebo můžete vytvořit trvalou tabulku s čísly ve vaší databázi.

Tuto sekvenční tabulku pak použijeme k JSON_EXTRACT() hodnoty z pole na prvním klíči, druhém klíči, třetím klíči a tak dále. Jakmile vyjmeme hodnoty v samostatném řádku, můžeme jednoduše použít DISTINCT získat z nich jedinečné hodnoty. Poté můžeme použít JSON_ARRAYAGG() funkci znovu agregovat tyto jedinečné hodnoty zpět jako pole JSON.

Schéma (MySQL v5.7)

SET @json = '["a", "b", "b", "a", "c"]';

Dotaz

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;

Výsledek

| unq_json_array  |
| --------------- |
| ["a", "b", "c"] |

Zobrazit na DB Fiddle



  1. MYSQL vypočítává průměr na počet

  2. Typ Mysql Time poskytuje ArgumentError:argument mimo rozsah v Rails, pokud je více než 24 hodin

  3. MariaDB - INNODB přeskakování číselné řady při vytváření přírůstkových záznamů - proč?

  4. integrace jara 3, hibernace 3, maven a mysql