[英]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.