mysql - 如何在select语句中选择列名

标签 mysql sql

我想从表 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/

相关文章:

php - MySQL:获取某一行

php - 使用 php 在文件名中包含日期的 MySql 备份

mysql - 何时使用 float 与十进制数

sql - 如何使用 sql 向 csv 文件添加新的换行符?

mysql - 如何在magento中测试sql查询?

php - 如何限制从数据库回显的字符?

php - 选择行与最新日期的SQL PHP

sql - 如何通过 Node 和 pg 导入 PostgreSQL 数据库转储

mysql - SQL数据库设计: comma separated lists as columns or a better solution?

mysql - 在mysql中连接表的正确方法是什么