質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

5回答

15473閲覧

SQL文でコンマ区切りのカラムを複数行にする方法

namuyan

総合スコア76

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2017/06/05 03:31

編集2017/06/05 04:14

10.1.19-MariaDBを使用しています。

SQL

1SELECT addrs,inputs,outputs FROM tx WHERE name = 'kawasaki';

このように表示されるデータを

text

1+-------------+--------+---------+ 2| taddrs | inputs | outputs | 3+-------------+--------+---------+ 4| zxc,qaz,poq | 100 | 0 | 5| qwe,yse,rre | 10 | 0 | 6+-------------+-------+----------+

このように表示したいです。

text

1+-------------+--------+---------+ 2| taddrs | inputs | outputs | 3+-------------+--------+---------+ 4| zxc | 100 | 0 | 5| qaz | 100 | 0 | 6| poq | 100 | 0 | 7| qwe | 10 | 0 | 8| yse | 10 | 0 | 9| rre | 10 | 0 | 10+-------------+-------+----------+

このようにコンマ区切りを分解して複数の行に変換したいのです。
何か良い方法はあるでしょうか?解答の方を宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/05 03:51

DBの種類とバージョンも明記してください。それにより回答の内容が変わってきます。
namuyan

2017/06/05 04:02

10.1.19-MariaDBです。Mysqlと互換性が高いです。
m.ts10806

2017/06/05 04:12 編集

質問本文に追記しておいてください(ここだと目につきづらいので)
guest

回答5

0

むしろ考え方が逆です

これはinputs,outputsが同じデータをグルーピングしているとすれば
データはバラバラにもち
select group_concat(taddrs),inputs,outputs from tbl
group by inputs,outputs

のように集計するようにしてください

投稿2017/06/05 04:58

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2017/06/05 08:31

正規化がまともにできているか心配ですね。
guest

0

他の方の回答のように無理やりできなくはないと思いますが、折角データベースを使ってるに、何であるカラムのデータがカンマ区切りなのか?
それを再検討されたほうが良いと思います。

投稿2017/06/05 08:39

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

無理矢理ですが。。。しかも3個と決めつけています。

sql

1select substring_index(substring_index(taddrs,',',-1),',',1) taddrs, input, output from tx where name='kawasaki' 2union all 3select substring_index(substring_index(taddrs,',',-2),',',1), input, output from tx where name='kawasaki' 4union all 5select substring_index(substring_index(taddrs,',',-3),',',1), input, output from tx where name='kawasaki' 6order by 2 desc, 1 desc; 7 8+--------+-------+--------+ 9| taddrs | input | output | 10+--------+-------+--------+ 11| zxc | 100 | 0 | 12| qaz | 100 | 0 | 13| poq | 100 | 0 | 14| yse | 10 | 0 | 15| rre | 10 | 0 | 16| qwe | 10 | 0 | 17+--------+-------+--------+ 186 rows in set (0.00 sec)

投稿2017/06/05 04:51

編集2017/06/05 05:03
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

無理やりですが…。
カラム数に応じてクエリを増やさないといけないのが難点ですが、考えられる最大で定義しておけば大丈夫です。

SQL

1select * from ( 2 select substring_index(substring_index(taddrs,',',c),',',-1), inputs, outputs, name from ( 3 select 1 as c, tx.* from tx where length(taddrs) - length(replace(taddrs,',','')) >= 0 4 ) t1 5 union 6 select substring_index(substring_index(taddrs,',',c),',',-1), inputs, outputs, name from ( 7 select 2 as c, tx.* from tx where length(taddrs) - length(replace(taddrs,',','')) >= 1 8 ) t2 9 union 10 select substring_index(substring_index(taddrs,',',c),',',-1), inputs, outputs, name from ( 11 select 3 as c, tx.* from tx where length(taddrs) - length(replace(taddrs,',','')) >= 2 12 ) t3 13# 以下はカラム数に応じて増やす 14# union 15# select substring_index(substring_index(taddrs,',',c),',',-1), inputs, outputs, name from ( 16# select 4 as c, tx.* from tx where length(taddrs) - length(replace(taddrs,',','')) >= 3 17# ) t4 18) t 19where name='kawasaki';

投稿2017/06/05 04:42

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DBはpostgresqlでしょうかね?
postgresなら、string_to_array関数とunnest関数で実現できますよ。

postgres以外でしたら、無視してください。

投稿2017/06/05 03:46

koizumi

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問