You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一张表某列的记录复制到另一张表的指定列

将查询结果复制到另一张表的方法

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;
      

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:28:08