我在不同的数据库上有两个相同的表
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个列名。如何从实时数据库表中选择所有列,并将其结果放入插入中的()。
答案 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。