首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql经典的剔除表中重复数据

2012-08-03 
sql经典的删除表中重复数据sql语句:????????????????delete ?from 表名 t1 where rowid ! (select min(ro

sql经典的删除表中重复数据

sql语句:

????????????????delete ?from 表名 t1 where rowid != (select min(rowid) from 表名 t2 where t1.字段= t2.字段);

????????? or:

?????????????????delete ?from 表名 t1 where rowid != (select max(rowid) from 表名 t2 where t1.字段= t2.字段);

?

说明:

? ? ? ? ?在oracle中,rowid是虚列,rowid是物理地址,用于定位oracle中具体数据的物理存储位置。通俗的讲:rowid是相对不变的。

疑问:

对于小括号中的sql语句(select min(rowid) from 表名 t2 where t1.字段= t2.字段),尽管能够读懂,明白根据where条件查询出来的min(rowid)有多个结果。但是对于它的执行过程时存在疑问的!

疑问解答:

???????????????? where后面的条件是每走一行数据就执行一次的,所以能存在多个min(rowid)或者多个max(rowid),where t1.字段=t2.字段是一个动态的赋值的过程。

第二种方式:

?

delete from 表名 t1 where rowid not in (select min(rowid) from 表名 t group by t.uname);

?

用这种也可以删除成功!也更好理解一些,不过效率比较低!

热点排行