通过考虑特定标准删除重复

时间:2017-05-30 09:04:39

标签: duplicates ms-access-2010 criteria sql-delete specifications

我想请你删除重复但仍然是具体的。

SerWorkNumber is du

如果有" FD"在类型中代码不应该删除它。

我会非常感谢任何帮助。我陷入了:( 谢谢

1 个答案:

答案 0 :(得分:0)

最简单的方法是在每一行上都有一个唯一的标识符。因此,如果您还没有,请创建一个名为“row_id”的新列并将其设置为AutoNumber。保存表格,你现在应该在每一行都有一个唯一的ID。

接下来,您可以构建一个大丑陋的sql来执行您需要的操作,但是如果您的表很大,它将无法很好地处理子查询。所以最好使用临时表来保存重复的行,然后引用它作为你的删除语句。

所以首先确定重复项,然后存储最小行ID。

SELECT a.SerWorkNumber, a.SerialNo, a.Type, Min(a.row_id) AS MinOfrow_id INTO CD_FD_Dups
FROM CD_FD AS a
GROUP BY a.SerWorkNumber, a.SerialNo, a.Type
HAVING count(1) > 1;

接下来,从引用您在上面创建的临时表的实际表中删除:

DELETE 
FROM CD_FD AS a
WHERE EXISTS (
SELECT 1
 FROM CD_FD_Dups d
 WHERE d.SerWorkNumber = a.SerWorkNumber
      and  d.SerialNo = a.SerialNo
      and   d.Type = a.Type
      and   a.row_id > d.MinOfrow_id
);