sql >> Database teknologi >  >> RDS >> Mysql

SQL opdeler værdier til flere rækker

Hvis du kan oprette en taltabel, der indeholder tal fra 1 til de maksimale felter, der skal opdeles, kan du bruge en løsning som denne:

select
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
from
  numbers inner join tablename
  on CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
order by
  id, n

Se venligst violin her .

Hvis du ikke kan oprette en tabel, så kan en løsning være denne:

select
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
from
  (select 1 n union all
   select 2 union all select 3 union all
   select 4 union all select 5) numbers INNER JOIN tablename
  on CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
order by
  id, n

et eksempel på violin er her .



  1. hvordan man får det fulde resultatsæt fra SSMS

  2. Udførelsesrækkefølge for SQL-forespørgslen

  3. Bulk/batch opdatering/upsert i PostgreSQL

  4. Er der en postgres NÆRMESTE operatør?