1

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

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

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

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

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 个列名。如何从实时数据库表中选择所有列并将其结果放入插入的 () 中。

4

1 回答 1

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;

在此处查看小提琴。

于 2013-03-01T09:45:54.153 回答