jay*_*jay 2 sql-server duplication
我有一个包含 1 百万行数据的表 table1。
我想删除table1中的所有重复记录
我在看这个链接:
您能告诉我如何在 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)
语法略有不同:
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)
我相信这些语义符合你的,但请测试。
然后,当然,在您让任何人向此表中插入任何新的废话之前,添加适当的键约束。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |