6

1 つの文字列のみに変換する必要がある大きな MySQL SELECT クエリがあるため、2 つの個別のクエリを使用することなく、それから UPDATE を作成できます。簡単にするために、次の結果を返す SELECT クエリがあるとします。

ここに画像の説明を入力

すべてを次のようなものに変換するにはどうすればよいですか:

1,Bob,20;2,Adam,30;3,Steve,40;

で他のテーブルを更新するために使用できますか?

列数と行数の両方が変化する可能性があり、静的ではないことを知っています。(非常に重要です!特に列です!)。どうすればこれをやってのけることができますか? CONCAT()この状況では役に立たないと思います。

どんな助けでも大歓迎です。ありがとうございました。

4

4 に答える 4

16

これを試すことができますか?

SELECT group_concat(concat(id, ',', name, ',', age) separator ';')
FROM test

http://www.sqlfiddle.com/#!2/915557/9

于 2013-02-20T05:28:31.543 に答える
2

このタスクを実行するための個別のクエリを探していない場合、これはクエリ自体から実行できます。クエリの選択結果に応じて、別のテーブルに挿入してテーブルを更新することもできます。

元のテーブルがtable_fromであり、それをtable_toにコピーする必要があると仮定します(さらに、table_fromに上記の元のデータが含まれていると仮定します)。

table_fromからtable_toにコンテンツを挿入するには、

insert into table_to(id, name, age)
  select tf.id, tf.name, tf.age
  from table_from tf
  where tf.id != 3;

テーブルの正確な列数を渡す場合は、列名を省略して、自分の場合に役立つ値を渡すことができます。

insert into table_to
  select tf.id, tf.name, tf.age
  from table_from tf
  where tf.id != 3;

table_toのコンテンツをtable_fromから更新するには、

update table_to tt, table_from tf
  set tt.name = "Chandi"
  where tt.id = tf.id and tf.id = 1;   

http://www.sqlfiddle.com/#!2/af43a/1

于 2013-02-20T09:19:09.783 に答える
2

これを試して

SET @colnames := (SELECT GROUP_CONCAT(COLUMN_NAME, '\', \'') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'test' AND TABLE_SCHEMA = 'db');
SET @query := CONCAT('SELECT GROUP_CONCAT(', @colnames, 'SEPARATOR \';\') FROM test');
PREPARE STMT FROM @query;
EXECUTE STMT;
于 2013-02-20T06:06:32.883 に答える
0

.csv ファイルを使用することもできます。Micheal McLaughlin は、これを行う方法について非常に優れたチュートリアルを提供しています。 http://michaelmclaughlin.info/db1/lesson-7-aggregation/mysql-csv-upload/

于 2014-01-25T17:07:28.493 に答える