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

Microsoft Access中追加数据时验证复合主键存在性问题求助

Access复合主键下INSERT追加数据的NOT EXISTS报错解决方法

你的代码报错主要有两个原因:

  • 表名拼写错误:NOT EXISTS子查询里写的productsByProvider少了末尾的s,和主查询里的表名productsByProviders不匹配,Access无法识别这个表/别名。
  • 语法括号错误:WHERE子句最后多了一个闭合括号),破坏了SQL的语法结构。

修正后的完整SQL代码如下:

INSERT INTO percentage ( productId, productName, salesPrice, currentProvider, offerProvider, offerPrice, percentage )
SELECT products.productId AS productId, products.productName AS productName, products.pricePerUnitOrKg AS salesPrice, products.providerId AS currentProvider, productsByProviders.providerId AS offerProvider, productsByProviders.pricePerUnitOrKg AS offerPrice, Round(products.pricePerUnitOrKg/productsByProviders.pricePerUnitOrKg,3) AS percentage
FROM products INNER JOIN productsByProviders ON products.productId = productsByProviders.productId
WHERE NOT EXISTS (
    SELECT 1 FROM percentage 
    WHERE percentage.productId = productsByProviders.productId 
    AND percentage.offerProvider = productsByProviders.providerId
)

另外补充一个Access里常用的替代写法,用LEFT JOIN筛选未匹配的记录,效果和NOT EXISTS一致,有时候兼容性更好:

INSERT INTO percentage ( productId, productName, salesPrice, currentProvider, offerProvider, offerPrice, percentage )
SELECT products.productId, products.productName, products.pricePerUnitOrKg, products.providerId, productsByProviders.providerId, productsByProviders.pricePerUnitOrKg, Round(products.pricePerUnitOrKg/productsByProviders.pricePerUnitOrKg,3)
FROM (products INNER JOIN productsByProviders ON products.productId = productsByProviders.productId)
LEFT JOIN percentage ON (products.productId = percentage.productId AND productsByProviders.providerId = percentage.offerProvider)
WHERE percentage.productId IS NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:50:22