在我的表中,我有很多重复的记录
SELECT ENROLMENT_NO_DATE, COUNT(ENROLMENT_NO_DATE) AS NumOccurrences
FROM Import_Master GROUP BY ENROLMENT_NO_DATE HAVING ( COUNT(ENROLMENT_NO_DATE) > 1 )
如果第二次发生重复记录,我需要删除它......需要保留第一个或任何一个记录。我怎样才能做到这一点?
在我的表中,我有很多重复的记录
SELECT ENROLMENT_NO_DATE, COUNT(ENROLMENT_NO_DATE) AS NumOccurrences
FROM Import_Master GROUP BY ENROLMENT_NO_DATE HAVING ( COUNT(ENROLMENT_NO_DATE) > 1 )
如果第二次发生重复记录,我需要删除它......需要保留第一个或任何一个记录。我怎样才能做到这一点?
您可以使用 CTE 执行此任务:
;with cte as
(
select ENROLMENT_NO_DATE,
row_number() over(partition by ENROLMENT_NO_DATE order by ENROLMENT_NO_DATE) rn
from Import_Master
)
delete from cte where rn > 1
一种方法是创建一个辅助临时表
CREATE TABLE Import_Master_Deduped AS SELECT * FROM Import_Master WHERE FALSE;
这将创建一个与 Import_Master 具有相同结构的空表。现在使用索引对新表施加唯一性:
CREATE UNIQUE INDEX Import_Master_Ndx ON Import_Master_Deduped(ENROLMENT_NO_DATE);
最后用 INSERT IGNORE 复制包含重复记录的表,这样重复记录就不会被插入:
INSERT IGNORE INTO Import_Master_Deduped SELECT * FROM Import_Master;
此时,在检查一切正常后,您可以重命名这两个表交换它们的名称(这将丢失任何旧索引),或者 TRUNCATE Import_Master 表并将删除的重复记录从新表复制回旧表。
在第二种情况下,在旧表上重新创建 UNIQUE 约束以避免进一步重复;首先,在新表上重新创建任何旧索引。
最后,您删除不再需要的表。