gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:51:27 25 4
gpt4 key购买 nike

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

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

最佳答案

我认为对此没有纯 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;

请参阅 fiddle here .

关于mysql - 在 MySQL 中插入时从两个表中选择相同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com