繁体   English   中英

如何在选择语句中选择列名

[英]How to select column name in select statement

我想将数据从表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-“字段列表”中的未知列“ lat”

您不能像尝试那样在mysql中动态地执行此操作。 MySQL希望直接提供列名列表,而不是从子查询中提供。

如果要动态地执行此操作,则必须向后退回到用于与MySQL交互的任何语言(例如PHP或Java)。

你有尝试过吗?

insert into B(col1, . . ., coln)
    select col1, . . ., coln
    from A;

即,在select子句中列出A中的字段。 insert列列表中列出B的对应列。

如果需要列列表,请从INFORMATION_SCHEMA.COLUMNS获取它们,然后将其剪切并粘贴到查询中。

尝试这个

INSERT INTO B (field1,field2,...,fieldN) 
        SELECT (field1,field2,...,fieldN) FROM A

其实有办法

SET @query = CONCAT('REPLACE INTO `A` (', 
                  (SELECT GROUP_CONCAT(CONCAT('`',column_name, '`')) 
                  FROM information_schema.columns 
                  WHERE  `TABLE_SCHEMA`='test1' AND `table_name` = 'A'
                  AND column_name IN (SELECT column_name FROM information_schema.columns WHERE table_schema = 'test1' AND table_name='B')) ,
                  ') (SELECT  ', 
                 (SELECT GROUP_CONCAT(CONCAT('`',column_name, '`')) 
                  FROM information_schema.columns 
                  WHERE  `TABLE_SCHEMA`='test1' AND `table_name` = 'A'
                  AND column_name IN (SELECT column_name FROM information_schema.columns WHERE table_schema = 'test1' AND table_name='B')), 
               ' FROM  `B`)');


PREPARE stmt FROM @query;
EXECUTE stmt;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM