6

我有一个大的 MySQL SELECT 查询,我只需要转换成一个字符串,所以我可以用它进行更新,而不必使用两个单独的查询。为简单起见,假设我们有一个返回此结果的 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_from 更新 table_to 的内容,

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 回答