尝试从访问表中删除重复的记录

时间:2018-11-29 04:54:33

标签: sql ms-access

我想从数据库中的表中删除重复的记录。我正在使用下面的查询来创建一个临时表,以便识别重复项,然后将其删除。但是,我不断收到“无法从指定的表中删除”错误消息。为什么此查询不起作用?如何编辑它才能起作用?谢谢!

DELETE [Carrier Name Crosswalk].*
FROM [Carrier Name Crosswalk]
INNER JOIN [Carrier Name Crosswalk] AS [Carrier Name Crosswalk_1]
    ON [Carrier Name Crosswalk].[DYCR TPA_CARRIER] = [Carrier Name Crosswalk_1].[DYCR TPA_CARRIER]
WHERE ((([Carrier Name Crosswalk_1].ID)>[Carrier Name Crosswalk].[ID]));

2 个答案:

答案 0 :(得分:1)

您可以在下面尝试-

DELETE *
FROM [Carrier Name Crosswalk] AS C1
WHERE C1.[ID]<>
     (SELECT MAX(C2.[ID])
      FROM [Carrier Name Crosswalk] AS C2
      WHERE C2.[DYCR TPA_CARRIER] = C1.[DYCR TPA_CARRIER]);

答案 1 :(得分:0)

这里是一种选择:

DELETE *
FROM [Carrier Name Crosswalk] t1
WHERE EXISTS (SELECT 1 FROM [Carrier Name Crosswalk] t2
              WHERE t1.[DYCR TPA_CARRIER] = t2.[DYCR TPA_CARRIER] AND
                    t2.ID < t1.ID) = TRUE;

这里的逻辑是检查EXISTS子句中是否对于每个DYCR TPA_CARRIER,我们都可以在同一表中找到另一个匹配的载波,其ID的值小于 而不是当前记录的ID被考虑删除。如果我们可以找到一条较低的ID记录,那么我们将删除当前记录,该记录必须是重复记录。