在MySQL中插入时,从两个表中选择相同的列

时间:2013-03-01 09:24:07

标签: mysql sql

我在不同的数据库上有两个相同的表

Database : live
table : customer
id | name | email | address

Database : test
table : customer
id | name | email | address | phone | post_code | company

这只是样本结构。我在实时数据库表中有15个字段,在测试数据库表中有35个字段。我想编写一个可以从live到test数据库表插入数据的查询。我怎样才能做到这一点。我试过这个

INSERT INTO test.customer
SELECT *
FROM live.customer as cd
WHERE NOT EXISTS(SELECT * from test.customer);

如果数据的顺序不同,则会将数据插入错误的列中 这是我尝试过的另一种方式

INSERT INTO test.customer (id,name,email,address)
SELECT *
FROM live.customer as cd
WHERE NOT EXISTS(SELECT * from test.customer);

这很好,但我不想写15个列名。如何从实时数据库表中选择所有列,并将其结果放入插入中的()。

1 个答案:

答案 0 :(得分:2)

我认为没有纯粹的SQL解决方案。但您可以使用以这种方式创建的动态查询:

SET @sql = null;

SELECT
  CONCAT('INSERT INTO test.customer (',
    group_concat(CONCAT('`', COLUMN_NAME, '`') separator ','),
    ') SELECT ',
    group_concat(CONCAT('`', COLUMN_NAME, '`') separator ','),
    ' FROM live.customer WHERE NOT EXISTS(SELECT * from test.customer)')
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_NAME`='customer' AND `TABLE_SCHEMA`='test'
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SELECT * FROM test_customer;

请参阅小提琴here