sql >> Databasteknik >  >> RDS >> Mysql

SQL delar upp värden till flera rader

Om du kan skapa en siffertabell som innehåller nummer från 1 till de maximala fälten att dela, kan du använda en lösning som denna:

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 fiolen här .

Om du inte kan skapa en tabell kan en lösning vara denna:

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

ett exempel på fiol finns här .



  1. Enkelt sätt att välja höger kolumn som primärnyckel för en given tabell

  2. Det går inte att ta bort eller uppdatera en överordnad rad:en begränsning av främmande nyckel misslyckas

  3. hur man skapar ISO-8601 gregoriansk datumtabell i postgres

  4. Klassen hittades inte laddar JDBC org.postgresql.Driver