我有一个大的 MySQL SELECT 查询,我只需要转换成一个字符串,所以我可以用它进行更新,而不必使用两个单独的查询。为简单起见,假设我们有一个返回此结果的 SELECT 查询:
我如何将所有这些转换成这样的东西:
1,Bob,20;2,Adam,30;3,Steve,40;
我可以用它来更新其他表吗?
知道列数和行数都可以改变并且不是静态的。(非常重要!尤其是列!)。我怎样才能做到这一点?我认为CONCAT()
在这种情况下无济于事。
任何帮助,将不胜感激。谢谢你。
你能试试这个吗?
SELECT group_concat(concat(id, ',', name, ',', age) separator ';')
FROM test
如果您不是在寻找单独的查询来执行此任务,则可以通过查询本身来实现。您可以根据查询选择结果插入另一个表并更新表。
假设您的原始表是 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;
尝试这个
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;
您也可以使用 .csv 文件。Micheal McLaughlin 有一些关于如何做到这一点的非常好的演练。 http://michaelmclaughlin.info/db1/lesson-7-aggregation/mysql-csv-upload/