追加查询,跳过重复条目(重复项不是主键)
Posted
技术标签:
【中文标题】追加查询,跳过重复条目(重复项不是主键)【英文标题】:append query, skipping duplicate entries (duplicates are not primary key) 【发布时间】:2015-07-07 18:53:21 【问题描述】:我在这里有一个追加查询。我希望它从 Excel 电子表格更新 Access 中的现有项目表。我希望它忽略重复项。每次我运行它时,它都会弹出一个关于最终“Projects.[Measure]”的错误。我哪里做错了?
INSERT INTO Projects ([Measure],[Customer Number], Store, [Customer Name], [CustomerAddress], [Measure Received])
SELECT [Measure], [Customer Number], [Store], [Customer Name], [CustomerAddress], [MeasureReceived]
FROM NewProjects
WHERE NOT EXISTS
(
SELECT * FROM NewProjects
WHERE NewProjects.[Measure] = Projects.[Measure]
)
;
【问题讨论】:
【参考方案1】:您的主查询包括这个子查询:
SELECT * FROM NewProjects
WHERE NewProjects.[Measure] = Projects.[Measure]
WHERE
子句引用 Projects.[Measure]。但是 Projects 不包含在 FROM
子句中,因此 Access 猜测 Projects.[Measure] 必须是参数的名称。
考虑另一种方法。首先创建一个返回“非重复”行的SELECT
查询。 LEFT JOIN
NewProjects 到 Projects 并询问右侧 Measure 值为 Null 的那些行 --- 这些是 NewProjects 项目中不存在(不匹配)的行:
SELECT
n.Measure,
n.[Customer Number],
n.Store,
n.[Customer Name],
n.CustomerAddress,
n.MeasureReceived
FROM
NewProjects AS n
LEFT JOIN Projects AS p
n.Measure = p.Measure
WHERE p.Measure Is Null;
调查 Access“不匹配的查询向导”。它可以指导您完成创建类似查询的过程。但是,无论您使用向导还是复制我的示例查询并将其粘贴到 SQL 视图中,请确认它返回正确的(非重复)行。然后您需要做的就是将INSERT
部分添加到查询的开头:
INSERT INTO Projects ([Measure],[Customer Number], Store, [Customer Name], [CustomerAddress], [Measure Received])
【讨论】:
【参考方案2】:如果不查看一些示例数据,这很难确定,但也许这会为您提供您正在寻找的插入集。
INSERT INTO Projects ([Measure],[Customer Number], [Store], [Customer Name], [CustomerAddress], [Measure Received])
SELECT np.[Sales Document], np.[Sold-to party], np.[Site], np.[Name 1], pn.[Sold-to address], np.[Created On]
FROM NewProjects np
WHERE np.[Sales Document] NOT IN
(SELECT p.[Measure] FROM Projects p);
【讨论】:
以上是关于追加查询,跳过重复条目(重复项不是主键)的主要内容,如果未能解决你的问题,请参考以下文章