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

如何按指定规则将内存表数据迁移到同结构生产表,匹配依据为barcode和company列

你的原有SQL存在两个核心问题:

  1. 仅对temp_products做单表查询,没有关联正式表products,所以WHERE子句中引用products字段的逻辑完全无效
  2. 普通INSERT语法仅支持新增操作,无法实现「匹配则更新、不匹配则插入」的需求

前置准备

首先必须在正式表products上创建products_barcode和products_comp的联合唯一索引,作为数据冲突的识别依据:

CREATE UNIQUE INDEX idx_uniq_barcode_comp ON products(products_barcode, products_comp);

不同数据库实现方案

MySQL/MariaDB 方案

使用INSERT ... ON DUPLICATE KEY UPDATE语法,触发唯一键冲突时自动执行更新:

INSERT INTO products (products_sku, products_barcode, products_comp, 【其他需要同步的字段】)
SELECT products_sku, products_barcode, products_comp, 【temp_products中对应字段】
FROM temp_products
ON DUPLICATE KEY UPDATE
  products_sku = VALUES(products_sku),
  -- 其他需要同步更新的字段都按照上面的格式补充即可
  products_comp = VALUES(products_comp);

PostgreSQL 方案

使用ON CONFLICT ... DO UPDATE语法:

INSERT INTO products (products_sku, products_barcode, products_comp, 【其他需要同步的字段】)
SELECT products_sku, products_barcode, products_comp, 【temp_products中对应字段】
FROM temp_products
ON CONFLICT (products_barcode, products_comp) DO UPDATE
SET
  products_sku = EXCLUDED.products_sku,
  -- 其他需要同步更新的字段都按照上面的格式补充即可
  products_comp = EXCLUDED.products_comp;

通用MERGE语法方案(支持Oracle、SQL Server、PostgreSQL 15+、MySQL 8.0.31+)

符合SQL标准,兼容大部分主流新版本数据库:

MERGE INTO products AS t
USING temp_products AS s
ON (t.products_barcode = s.products_barcode AND t.products_comp = s.products_comp)
-- 匹配到冲突数据则更新
WHEN MATCHED THEN
  UPDATE SET 
    t.products_sku = s.products_sku,
    -- 其他需要同步更新的字段都按照上面的格式补充即可
    t.products_comp = s.products_comp
-- 无匹配则插入新数据
WHEN NOT MATCHED THEN
  INSERT (products_sku, products_barcode, products_comp, 【其他需要同步的字段】)
  VALUES (s.products_sku, s.products_barcode, s.products_comp, 【s.其他temp_products对应字段】);

注意事项

  • 生产环境执行前务必先备份正式表数据,避免错误覆盖
  • 可以用事务包裹同步语句,校验结果符合预期再提交,出错可直接回滚:
BEGIN;
-- 此处写你选择的同步SQL
-- 先查询校验同步结果,确认正确再执行COMMIT,错误执行ROLLBACK即可回滚
COMMIT;

内容的提问来源于stack exchange,提问作者V.Rangelov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:04