我的表格包含10多列。
例如:
id name date status rec_id ..... etc
-------------------------------------------------------
1 ssss 01/01/2000 Active 3 .....
2 ssss 01/01/2000 Active 3 .....
3 aaaa 11/01/2002 Active 5 .....
4 aaaa 11/01/2002 Active 5 .....
我想删除此表中的重复记录,我想要下面的结果
1 ssss 01/01/2000 Active 3 .....
3 aaaa 11/01/2002 Active 5 .....
我们如何实现这一目标?
我可以删除基于id的重复记录,如下所示
delete from test
where ID not in (select min(ID)
from test
group by name);
它被删除了。但我想确保上述方法是正确的吗?
答案 0 :(得分:1)
是的,您的查询是在正确的轨道上,但您需要包含定义重复的所有列,而不仅仅是name
:
DELETE FROM test
WHERE ID NOT IN
( SELECT MIN(ID) FROM TEST
GROUP BY name, date, rec_id, status , {etc} )
答案 1 :(得分:1)
使用可以使用CTE,如下所示 对于列列表,请使用您希望拥有唯一记录的所有列。 不要在CTE中的列列表中包含您的ID列
WITH DuplicateCTE
AS
(
SELECT column1,column2,..,lastcolumn
ROW_NUMBER() OVER
(PARTITION BY column1,column2,..,lastcolumn ORDER BY column1) AS DuplicateCount
FROM yourtablename
)
DELETE FROM DuplicateCTE WHERE DuplicateCount > 1
GO