Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj różne wartości z tablicy MySQL JSON

Przepraszam za nekromancję, ale napotkałem podobny problem. Rozwiązaniem jest:JSON_TABLE() dostępne od MySQL 8.0.

Najpierw połącz tablice w wierszach w jednowierszową pojedynczą tablicę.

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]

Po drugie, użyj json_table aby przekonwertować tablicę na wiersze.

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

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

Zauważ group by val za uzyskanie odrębnych wartości. Możesz także order je i wszystko...

Możesz też użyć group_concat(distinct val) bez group by dyrektywa (!), aby uzyskać wynik jednowierszowy.

Lub nawet cast(concat('[', group_concat(distinct val), ']') as json) aby uzyskać odpowiednią tablicę json:[15, 66, 578, 603, 751, 753, 801, 803] .

Przeczytaj moje najlepsze praktyki dotyczące używania MySQL jako magazynu JSON :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Golang ORDER BY problem z MySql

  2. SQL vs MySQL:reguły dotyczące operacji agregujących i GROUP BY

  3. Rozmiar pola MySql do przechowywania treści wiadomości e-mail

  4. MySQL wyłącza i włącza klawisze

  5. PHP Wyodrębnij kody z TextArea i przekaż do Mysql SELECT IN Query