1. ホーム
  2. mysql

[解決済み] SQLで複数行に値を分割する

2023-01-19 05:16:06

質問

私はテーブルを持っています。

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

フィドルをご覧ください ここで .

テーブルを作成できない場合、解決策としてこのようにすることができます。

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

フィドルの例は ここで .