如何将一张表某列的记录复制到另一张表的指定列
将查询结果复制到另一张表的方法
1. 插入到已存在的目标表
直接使用 INSERT ... SELECT 语法,把你的关联查询嵌套进去即可。假设目标表名为 target_table,需要插入的列是 crm_id 和 deposit_id,示例代码如下:
INSERT INTO target_table(crm_id, deposit_id) SELECT vc.crm_id, vcd.deposit_id FROM visa_card_deposit vcd INNER JOIN deposits d on d.id = vcd.deposit_id INNER JOIN visa_cards vc on vcd.visa_card_id = vc.id;
关键注意点:
- 确保目标表的列与查询返回的列数据类型完全匹配,否则会抛出类型不兼容错误。
- 如果目标表有主键或唯一约束,需避免重复插入,不同数据库有不同处理方案:
- MySQL/MariaDB:用
ON DUPLICATE KEY UPDATE处理冲突(假设crm_id是主键):INSERT INTO target_table(crm_id, deposit_id) SELECT vc.crm_id, vcd.deposit_id FROM visa_card_deposit vcd INNER JOIN deposits d on d.id = vcd.deposit_id INNER JOIN visa_cards vc on vcd.visa_card_id = vc.id ON DUPLICATE KEY UPDATE deposit_id = VALUES(deposit_id); - PostgreSQL:用
ON CONFLICT子句处理冲突:INSERT INTO target_table(crm_id, deposit_id) SELECT vc.crm_id, vcd.deposit_id FROM visa_card_deposit vcd INNER JOIN deposits d on d.id = vcd.deposit_id INNER JOIN visa_cards vc on vcd.visa_card_id = vc.id ON CONFLICT (crm_id) DO UPDATE SET deposit_id = EXCLUDED.deposit_id;
- MySQL/MariaDB:用
2. 直接创建新表并插入数据
如果目标表还不存在,可以用 CREATE TABLE ... AS SELECT 语法,一次性完成表创建和数据插入:
CREATE TABLE target_table AS SELECT vc.crm_id, vcd.deposit_id FROM visa_card_deposit vcd INNER JOIN deposits d on d.id = vcd.deposit_id INNER JOIN visa_cards vc on vcd.visa_card_id = vc.id;
这种方式会自动匹配查询结果的列名和数据类型来创建新表。
内容的提问来源于stack exchange,提问作者nina
相关产品推荐
相关产品推荐

