gpt4 book ai didi

sql - 删除重复记录 MS Access SQL Microsoft

转载 作者:行者123 更新时间:2023-12-04 17:44:26 26 4
gpt4 key购买 nike

在 Access 中,我能够运行 SELECT 查询来查找我需要删除的重复记录,但无法执行将删除它们的查询。

这是查询代码,它向我显示了正确的重复记录并将它们分组。它向我显示了 1083 条记录(它们已分组)

SELECT Count(tblDat01Prod.[MFG #]) AS [CountOfMFG #], Last(tblDat01Prod.[MFG #]) AS [LastOfMFG #], tblDat01Prod.[MFG #]
FROM tblDat01Prod
GROUP BY tblDat01Prod.[MFG #]
HAVING (((Count(tblDat01Prod.[MFG #]))>1));

这是删除记录的代码,它要删除所有记录,事件虽然我只想删除1083。

DELETE tblDat01Prod.[MFG #]
FROM tblDat01Prod
WHERE (((tblDat01Prod.[MFG #]) In (SELECT Last(tblDat01Prod.[MFG #]) AS LastMFG
FROM tblDat01Prod
GROUP BY [MFG #]
HAVING (((Count(tblDat01Prod.[MFG #]))>1));)));

能否请教如何改正?

最佳答案

由于多种原因,查询将无法正常工作。主要原因是当您删除项目时,项目的数量会发生变化,因此引擎无法跟踪要删除的内容。

话虽如此,您的查询并没有真正意义。 Last 函数不应与 Count 位于同一列。否则,您将删除每个重复项,而不仅仅是每个重复项中的最后一个。

如果您有主键,则可以分两步完成。如果不这样做,它将采取额外的步骤,因为您需要一个唯一的字段:

替代步骤,如果您没有主键:添加一个名为 RecordId 的自动编号字段。如果您已经有一个主键,请在以下步骤中使用它而不是 RecordId。

首先,使用您要删除的 ID 创建一个临时表。我们称之为 temp_Delete:

SELECT Last([RecordId]) AS LastId INTO temp_Delete
FROM tblDat01Prod
GROUP BY [MFG #]
HAVING Count([MFG #])>1

其次,运行使用 temp_Delete 表限制删除内容的删除语句。您将加入 RecordId 字段(警告:您可能无法在可视化编辑器中执行此操作,因为它会弄乱您的 sql。您必须手动编写和运行它。)

DELETE DISTINCTROW  tblDat01Prod.* 
FROM tblDat01Prod INNER JOIN temp_Delete
ON tblDat01Prod.RecordId = temp_Delete.LastId

安全步骤:如果您非常担心丢失重要数据,我建议您在删除之前再添加一个步骤。将 bool IsDelete 列添加到 tblDat01Prod 并使用 temp_Delete 表将匹配字段更新为 True。然后在删除之前比较哪些记录被设置为删除,哪些没有。然后删除 IsDelete 为真而不是上面第 2 步的记录。

最后,删除您的 temp_Delete 表和您添加到 tblDat01Prod 的任何您不想保留的字段。

关于sql - 删除重复记录 MS Access SQL Microsoft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com