【发布时间】:2012-11-29 23:05:27
【问题描述】:
我asked this question a while back 删除基于列的重复记录。答案很有效:
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by sourceid
)
我现在有一个类似的情况,但是重复记录的定义是基于多列的。如何更改上述 SQL 以识别重复记录,其中唯一记录定义为从 Col1 + Col2 + Col3 连接。我会做这样的事情吗?
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by col1, col2, col3
)
【问题讨论】:
-
原则仍然有效——分组是由一列还是多列无关紧要。您将只保留组中的第一行。但是-如果您不介意我说-请务必在发出删除命令之前检查您的数据。将删除转换为选择,看看什么会/不会存活。
-
@Nikola Markovinovic - 看起来它在做正确的事,但只是想确认
-
@leora 我发现您用于概念化/逆向工程的语法很麻烦。而且它不能很好地转化为 id 可能为 null 的情况(因为当涉及到 null 时,
not in的行为与您预期的不同)。我意识到这不太可能是一个因素,但了解 CTE 和 NOT EXISTS 很重要,因为它可能... -
你没有说 SQL Server 的版本。 2005 年? 2008 年? 2012 年?
标签: sql-server database