我想从表 A 复制/更新数据到表 B。表 B 有一些额外的列。我尝试了以下选项。
1) `REPLACE INTO `B` (SHOW FIELDS FROM 'A') SELECT * FROM `A
2) `REPLACE INTO `B`
(SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='test1' AND `TABLE_NAME`='A') SELECT * FROM `A
但是它会抛出错误。你们能帮我如何使用选择查询来选择名称吗?
更新:
3) 正如 Jerko 所建议的那样,
我有两个表 A(warehouse_id,long,lat) B(warehouse_id,long)
应用了以下声明。
SET @query = CONCAT('REPLACE INTO `A` (SELECT ',
(SELECT GROUP_CONCAT(CONCAT('`',column_name, '`'))
FROM information_schema.columns
WHERE `TABLE_SCHEMA`='test2' AND `table_name` = 'A'),
' FROM `B`)');
PREPARE stmt FROM @query;
EXECUTE stmt;
这给了我错误
"#1054 - Unknown column 'lat' in 'field list' "
最佳答案
您不能像您尝试的那样在 mysql 中动态地执行此操作。 MySQL 希望直接提供您的列名列表,而不是从子查询中提供。
如果您想动态地执行此操作,则必须退回到上游,使用与 MySQL 交互所使用的任何语言,例如 PHP 或 Java。
关于mysql - 如何在select语句中选择列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23291242/