sql >> Databasteknik >  >> RDS >> Mysql

Få distinkta värden från MySQL JSON-array

Ursäkta för nekromansen, men jag har stött på liknande problem. Lösningen är:JSON_TABLE() tillgängligt sedan MySQL 8.0.

Slå först samman arrayerna i rader till en rad enkel array.

select concat('[',         -- start wrapping single array with opening bracket
    replace(
        replace(
            group_concat(vals),  -- group_concat arrays from rows
            ']', ''),            -- remove their opening brackets
        '[', ''),              -- remove their closing brackets
    ']') as json             -- finish wraping single array with closing bracket
from (
  select '[801, 751, 603, 753, 803]' as vals
  union select '[801, 751]'
  union select '[578, 66, 15]'
) as jsons;

# gives: [801, 751, 603, 753, 803, 801, 751, 578, 66, 15]

För det andra, använd json_table för att konvertera arrayen till rader.

select val
from (
    select concat('[',
        replace(
            replace(
                group_concat(vals),
                ']', ''),
            '[', ''),
        ']') as json
    from (
      select '[801, 751, 603, 753, 803]' as vals
      union select '[801, 751]'
      union select '[578, 66, 15]'
    ) as jsons
) as merged
join json_table(
    merged.json,
    '$[*]' columns (val int path '$')
) as jt
group by val;

# gives...
801
751
603
753
803
578
66
15

Se https://dev. mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table

Observera group by val för att få distinkta värden. Du kan också order dem och allt...

Eller så kan du använda group_concat(distinct val) utan group by direktiv (!) för att få en rad resultat.

Eller till och med cast(concat('[', group_concat(distinct val), ']') as json) för att få en ordentlig json-array:[15, 66, 578, 603, 751, 753, 801, 803] .

Läs mina Bästa metoder för att använda MySQL som JSON-lagring :)




  1. COMMIT OR conn.setAutoCommit(true)

  2. Spara tabelldata som erhållits när du skrapar en webbsida med casperjs

  3. MySQL-fråga årvecka för den aktuella veckan för att börja på en torsdag, sluta på onsdag

  4. Hur man installerar sqlcmd &bcp på Ubuntu