我有桌子:

id | name
1  | a,b,c
2  | b


我想要这样的输出:

id | name
1  | a
1  | b
1  | c
2  | b

最佳答案

如果可以创建一个数字表,其中包含从1到要拆分的最大字段的数字,则可以使用以下解决方案:

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


请参阅小提琴here

如果无法创建表,则解决方案可以是:

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


一个小提琴的例子是here

关于mysql - SQL将值拆分为多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50794857/

10-12 00:59