一尘不染

如何删除表中的重复记录?

sql

我在测试数据库中有一张表,当运行INSERT脚本进行设置时,显然有人对它有些不满意。模式如下所示:

ID UNIQUEIDENTIFIER
TYPE_INT SMALLINT
SYSTEM_VALUE SMALLINT
NAME VARCHAR
MAPPED_VALUE VARCHAR

它应该有几十行。它大约有200,000,其中大多数是重复的,其中TYPE_INT,SYSTEM_VALUE,NAME和MAPPED_VALUE完全相同,而ID不相同。

现在,我可能可以编写一个脚本来清理此问题,该脚本在内存中创建一个临时表,用于INSERT .. SELECT DISTINCT获取所有唯一值,TRUNCATE原始表,然后将所有内容复制回去。但是,有没有更简单的方法来执行此操作,例如DELETEWHERE子句中进行特殊查询?


阅读 169

收藏
2021-03-17

共1个答案

一尘不染

您没有提供表名,但我认为类似的方法应该可行。只留下恰好具有最低ID的记录。您可能要先使用ROLLBACK进行测试!

BEGIN TRAN
DELETE <table_name>
FROM <table_name> T1
WHERE EXISTS(
SELECT * FROM <table_name> T2 
WHERE     
T1.TYPE_INT = T2.TYPE_INT  AND
T1.SYSTEM_VALUE = T2.SYSTEM_VALUE  AND
T1.NAME = T2.NAME  AND
T1.MAPPED_VALUE = T2.MAPPED_VALUE  AND
T2.ID > T1.ID
)

SELECT * FROM <table_name>

ROLLBACK
2021-03-17