我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
)
原理仍然存在 - 分组是由一个还是多个列组成并不重要。您将只保留组中的第一行。但是 - 如果您不介意我说 - 在发出删除之前一定要检查您的数据。转换删除选择,看看什么将不会生存。 – 2012-07-23 14:41:52
@Nikola Markovinovic - 它看起来像做正确的事情,但只是想确认 – leora 2012-07-23 15:00:11
@leora我发现你使用的语法繁琐的概念化/逆向工程。它不能很好地转化为id可能为空的情况(因为在不涉及空值的情况下,'not in'的行为不如您预期的那样)。我意识到这不太可能是一个因素,但重要的是要了解有关CTE和不存在的情况下,它可能... – 2012-07-23 15:20:29