签到成功

知道了

CNDBA社区CNDBA社区

Oracle ROWID学习

2021-10-17 22:31 960 0 原创 oracle
作者: hbhe0316

rowid是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址,包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址。
除了在同一聚簇中可能不唯一外,每条记录的rowid是唯一的。可以理解成rowid就是唯一的。http://www.cndba.cn/hbhe0316/article/4941

http://www.cndba.cn/hbhe0316/article/4941

1.创建测试表

http://www.cndba.cn/hbhe0316/article/4941

SQL> create table t1 (id int,name varchar(10));
SQL> insert into t1 values (1,'a');
SQL> insert into t1 values (1,'a');
SQL> insert into t1 values (3,'c');
SQL> insert into t1 values (3,'c');
SQL> insert into t1 values (5,'e');
SQL> commit;

2.查询到的rowidhttp://www.cndba.cn/hbhe0316/article/4941

SQL> SELECT ROWID FROM T1 ORDER BY ROWID;

ROWID
------------------
AAAR37AABAAAbZBAAA
AAAR37AABAAAbZBAAB
AAAR37AABAAAbZBAAC
AAAR37AABAAAbZBAAD
AAAR37AABAAAbZBAAE

3.如果需要删除重复的数据
⑴ 通过创建临时表
可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:http://www.cndba.cn/hbhe0316/article/4941http://www.cndba.cn/hbhe0316/article/4941

SQL> create table t1_tmp as select distinct * from t1;

Table created.

SQL> truncate table t1;

Table truncated.

SQL> insert into t1 select * from t1_tmp;

3 rows created.

SQL> select * from t1;

        ID NAME
---------- --------------------
         1 a
         3 c
         5 e

⑵ 利用rowid结合max或min函数

SQL> delete from t1 a where rowid not in (select max(b.rowid) from t1 b where a.id=b.id and a.name = b.name); 

2 rows deleted.

或者http://www.cndba.cn/hbhe0316/article/4941http://www.cndba.cn/hbhe0316/article/4941http://www.cndba.cn/hbhe0316/article/4941

SQL> delete from t1 a where rowid < (select max(b.rowid) from t1 b where a.id=b.id and a.name = b.name); 

2 rows deleted.

SQL> select * from t1;

        ID NAME
---------- --------------------
         5 e
         1 a
         3 c

或者http://www.cndba.cn/hbhe0316/article/4941

SQL> delete from t1 where rowid not in (select max(rowid) from t1 t group by t.id, t.name);

2 rows deleted.

SQL> commit;

Commit complete.

SQL> select * from t1;

        ID NAME
---------- --------------------
         5 e
         3 c
         1 a

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux,oracle

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:1144800次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ