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

jay*_*jay 2 sql-server duplication

我有一个包含 1 百万行数据的表 table1。

我想删除table1中的所有重复记录

我在看这个链接:

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

您能告诉我如何在 SQL Server 中执行以下查询吗?

 DELETE FROM questions_tags q
WHERE EXISTS (
   SELECT 1
   FROM   questions_tags q1
   WHERE  q1.ctid < q.ctid
   AND    q.question_id = q1.question_id
   AND    q.tag_id = q1.tag_id
    );
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

语法略有不同:

DELETE q
FROM dbo.questions_tags AS q
WHERE EXISTS 
(
   SELECT 1
   FROM   dbo.questions_tags AS q1
   WHERE  q1.ctid < q.ctid
   AND    q.question_id = q1.question_id
   AND    q.tag_id = q1.tag_id
);
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢使用 CTE。然后我可以轻松地换入 aSELECT来验证我将要删除的内容,并轻松更改 where 子句以验证我将要保留的内容:

;WITH q AS 
(
  SELECT question_id, tag_id, ctid,
    rn = ROW_NUMBER() OVER (PARTITION BY question_id, tag_id ORDER BY ctid)
  FROM dbo.question_tags
)
--DELETE q
SELECT * FROM q 
WHERE rn > 1; -- to show keepers, change to = 1 
Run Code Online (Sandbox Code Playgroud)

相信这些语义符合你的,但请测试。

然后,当然,在您让任何人向此表中插入任何新的废话之前,添加适当的键约束。