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

如何比对Catalogue表补全Product表缺失记录并更新全列数据

Product表缺失产品补全实现方案

核心需求

对比Catalogue(产品目录表)和Product(产品表),将目录表中存在、但产品表未收录的产品记录完整插入到产品表中,不改动产品表现有记录。

测试用表结构&示例数据

Product表现有数据

ProductID ProductName Quantity
1         A           3
2         B           2
3         C           3

Catalogue表全量数据

CatelogueID ProductID ProductName Quantity
1           3         C           3
2           4         D           1
3           1         A           3
4           6         F           5
5           2         B           1
6           5         E           0

按上述示例数据,最终需要补入Product表的是ProductID为4、5、6的3条产品记录。

实现SQL

通用兼容写法(支持MySQL、SQL Server、PostgreSQL、Oracle等绝大多数主流数据库),通过NOT EXISTS判断产品是否已存在,不存在则插入:

INSERT INTO Product (ProductID, ProductName, Quantity)
SELECT 
    c.ProductID,
    c.ProductName,
    c.Quantity
FROM Catalogue c
WHERE NOT EXISTS (
    SELECT 1 
    FROM Product p 
    WHERE p.ProductID = c.ProductID
);

其他适配特定场景的写法

  • 支持差集语法的数据库(PostgreSQL、SQL Server等),可以用EXCEPT直接取两表ProductID的差集再关联插入:
INSERT INTO Product (ProductID, ProductName, Quantity)
SELECT c.ProductID, c.ProductName, c.Quantity
FROM Catalogue c
JOIN (
    SELECT ProductID FROM Catalogue
    EXCEPT
    SELECT ProductID FROM Product
) diff ON c.ProductID = diff.ProductID;
  • MySQL环境下也可以用左连接判空的写法,逻辑和NOT EXISTS一致:
INSERT INTO Product (ProductID, ProductName, Quantity)
SELECT c.ProductID, c.ProductName, c.Quantity
FROM Catalogue c
LEFT JOIN Product p ON c.ProductID = p.ProductID
WHERE p.ProductID IS NULL;

操作提示:默认用ProductID作为产品唯一匹配字段,如果业务上是用产品名等其他字段判定重复,调整关联判断的字段即可。正式执行插入前,建议先单独运行SELECT子句部分,确认待插入的数据符合预期,避免误写入。

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:09:47