2017-03-06 6 views
0

カラム名が文字列として渡されるカラム値を連結する必要があります。私はこのようになり設計が不十分なMySQLのテーブルを持っているクライアントいますにmysql concatカラムが文字列として渡される

------------------------------------------- 
| id | column_index | c1 | c2 | c3 | .... |c50| 

column_indexフィールドはC1、C5、C11と私は何をしたいのような列名のカンマ区切りの文字列ですがありますインデックスとして定義されている列に応じて、連結された列の値のみを返すように(ストアドプロシージャを使用せずに)単一の選択クエリを記述します。このような

何か:それはMySQLのそれに似た何かをしてクエリを作成する方法

SELECT id, column_index, CONCAT_WS(',' FOR col_name IN column_index) 

ですか?

答えて

0

データ構造に重大な問題があります。おそらく、過度に複雑なクエリを作成するのではなく、その修正にあなたの努力を払うべきでしょう。

前記、次はきれいではありませんが、動作するはずです:

select id, column_index, 
     concat_ws(',', 
       (case when find_in_set('c1', column_index) > 0 then c1 end), 
       (case when find_in_set('c2', column_index) > 0 then c2 end), 
       (case when find_in_set('c3', column_index) > 0 then c3 end), 
       . . . 
       ) as vals 
. . . 
+0

あなたは 'のID、' – Uueerdo

+0

@Uueerdo後に '' @colnames = column_indexが欠落しています。 。 。私は 'column_index'を列名として解釈しませんでした。興味深いデータ構造。 –

+0

私はこの構造が深刻に間違っていることに同意します。しかし、これは私のクライアントのプロダクションデータベースであり、私はそこにしかアクセスできないので、私はそれを変更することはできません。だからこそ私はcomlicated SQLで遊ぶ必要があるのです。 –

関連する問題