Delete from dupCityInfo Where ROWID Not In(
--每个组中最小的 ROWID
Select Min(ROWID) From dupCityInfo Group By id);
=$>5适用于有少量重复记录的情况=注意,对于有大量重复记录的情况,用以下语句效率会很低>:
Delete from dupCityInfo a where rowid<>(
select max(rowid) from dupCityInfo where id=a.id );
Oracle 伪列 RowNum
一、概述:
( 从 开始;
( 按照记录插入时的顺序给记录排序,所以有 -4 的子句时一定要注意啊!
使用时 (,-4 字段是否为主键有什么影响?
子查询中 (,而 用到外查询中到底是怎样的序列?
若 主键是按照从小到大的顺序插入的,' 语句没有 :&-4和 -4 的子
句时,( 的顺序和 顺序基本一致。
二、实例:
假设某个表 '=>有 $3条记录,如果用 '(%;'(?
(@3%只要是用小于号,查出来的结果很容易地与一般理解在概念上能达成一致,
应该不会有任何疑问的。
可如果用 '(%;'(?(A3=如果写下这样的查询
语句,这时候在您的头脑中应该是想得到表中后面 3 条记录>,你就会发现,显示出来的
结果要让您失望了,那问题是出在哪呢?
因为 是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列
=强调:先要有结果集>。简单的说 (是对符合条件结果的序列号。它总是从 1 开
始排起的。所以你选出的结果不可能没有 ,而有其他大于 的值。所以您没办法期望得
到下面的结果集:
$-------
)
55555555555555555
(A3没有记录,因为第一条不满足去掉的话,第二条的 又成了 ,
所以永远没有满足条件的记录。或者可以这样理解:
是一个序列,是 数据库从数据文件或缓冲区中读取数据的顺序。它
取得第一条记录则 ( 值为 ,第二条为 $,依次类推。如果你用
A%AB%B%-'(555 这些条件,因为从缓冲区或数据文件中得到的第一条记录的
( 为 ,则被删除,接着取下条,可是它的 ( 还是 ,又被删除,依次类推,
便没有了数据。