在我的表格中,我有很多重复的记录
SELECT ENROLMENT_NO_DATE, COUNT(ENROLMENT_NO_DATE) AS NumOccurrences
FROM Import_Master GROUP BY ENROLMENT_NO_DATE HAVING ( COUNT(ENROLMENT_NO_DATE) > 1 )
我需要删除重复记录,如果它是第二次出现...需要保留第一个或任何一个记录。我怎样才能做到这一点?
答案 0 :(得分:4)
您可以使用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
答案 1 :(得分: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约束以避免进一步重复;在第一个中,重新创建新表上的任何旧索引。
最后,您删除了不再需要的表格。