sql >> Databasteknik >  >> RDS >> Mysql

Hur man får unika / distinkta element inuti JSON-arrayen i MySQL 5.7

Det finns ingen direkt metod för att få ut distinkta värden ur en JSON-array i MySQL. En metod kan vara att använda ett tabellkoncept för sekvens/nummergenerator . Denna sekvenstabell kan användas som en härledd tabell (underfråga), eller så kan du skapa en permanent tabell som lagrar nummer i din databas.

Vi kommer sedan att använda den här sekvenstabellen för att JSON_EXTRACT() värden ut från array vid första nyckel, andra nyckel, tredje nyckel och så vidare. När vi har extraherat värdena i separata rader kan vi helt enkelt använda DISTINCT för att få ut unika värden ur dem. Efteråt kan vi använda JSON_ARRAYAGG() funktion för att återaggregera dessa unika värden tillbaka som en JSON-array.

Schema (MySQL v5.7)

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

Fråga

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;

Resultat

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

Visa på DB Fiddle



  1. En genväg för att uppdatera en tabellrad i databasen?

  2. Hur startar jag automatisk ökning från en specifik punkt?

  3. Vad är motsvarigheten till bind_result på PDO

  4. Laravel - PDO Prepared Statement - Kan inte köra frågor medan andra obuffrade frågor är aktiva