【发布时间】:2016-10-18 12:28:52
【问题描述】:
我继承了一个包含重复数据的 SQL Server 数据库。我需要找到并删除重复的行。但是没有 id 字段,我不确定如何找到行。
通常,我会使用 LEFT JOIN 将其与自身进行比较,并检查所有字段是否相同,除了 ID 字段为 table1.id <> table2.id,但没有它,我不知道如何查找重复行和不让它自己也匹配。
表格:
productId int not null,
categoryId int not null,
state varchar(255) not null,
dateDone DATETIME not null
样本数据
1, 3, "started", "2016-06-15 04:23:12.000"
2, 3, "started", "2016-06-15 04:21:12.000"
1, 3, "started", "2016-06-15 04:23:12.000"
1, 3, "done", "2016-06-15 04:23:12.000"
在该示例中,只有第 1 行和第 3 行是重复的。
如何查找重复项?
【问题讨论】:
-
您可以使用 cte 添加带有分区的
row_number()然后删除 where row_num > 1 I will work on example -
@Matt 你能举个例子吗?
-
一切都在那里,你的测试数据,在删除之前和之后选择。附带说明一下,如果您能够更改架构,您以后可以随时添加标识列。
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012