我有一个很大的MySQL SELECT查询,我需要只转换成一个字符串,所以我可以从中进行UPDATE,而不必使用两个单独的查询。为简单起见,我们假设我们有一个返回此结果的SELECT查询:
如何将所有内容转换为以下内容:
1,Bob,20;2,Adam,30;3,Steve,40;
我可以用它来更新其他表吗?
知道列数和行数都可以更改并且不是静态的。 (非常重要!特别是列!)。我该如何解决这个问题?我不认为CONCAT()
可以在这种情况下提供帮助。
任何帮助将不胜感激。谢谢你。
答案 0 :(得分:16)
你能试试吗?
SELECT group_concat(concat(id, ',', name, ',', age) separator ';')
FROM test
答案 1 :(得分: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;
答案 2 :(得分: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;
答案 3 :(得分:0)
您也可以使用.csv文件。 Micheal McLaughlin对如何做到这一点有一些很好的了解。 http://michaelmclaughlin.info/db1/lesson-7-aggregation/mysql-csv-upload/