日期:2014-05-18  浏览次数:20579 次

怎样能“高效”剔除表中某列重复的行
表中有一列   数据类型是   varchar(64)   ,这一列可能重复,现在要把这列重复的行删除,请问怎么能方便   快速的删除呢?

如:表
col001               col002         col003
dfag                   abc                   dgage
fdf                     def                   xyz
fejif                 def                   xyz

删除后效果
col001               col002         col003
dfag                   abc                   dgage
fdf                     def                   xyz


------解决方案--------------------
如:表
col001 col002 col003
dfag abc dgage
fdf def xyz
fejif def xyz

删除后效果
col001 col002 col003
dfag abc dgage
fdf def xyz

以col002,为准.保留任意一行.
delete from tb where col001 not in (select min(col001) from tb group by col002)

------解决方案--------------------
上面的回答都用到了 in (select ...) 这样当表中数据大于100万时是很慢的,你能想象in 中的数据是100万个以上选项的后果吗?慢死你。
对于1万条以下记录可以采用,100万以上记录应当采用:
select b.* from (select col003 from <table> group by col003 ) a left join <table> b on a.col003=b.col003