oracle行标识是什么,oraclerowid在表行中的物理标识

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 当然最常用的是用rowid去除重复: 查出重复数据: select a.rowid,a.* from 表名 a where a.rowid != ( select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ) 删

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

当然最常用的是用rowid去除重复:

查出重复数据: select a.rowid,a.* from 表名 a

where a.rowid !=

(

select max(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)

删除重复数据:

delete from 表名 a

where a.rowid !=

(

select max(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)

对于整行都重复的那么,可以使用distinct函数。

以下介绍下postgresql的ctid

testuser=# select ctid,* from t1 limit 1;

ctid | a

-------+-----------

(0,1) | 100000000

和oracle rowid类似也是一个物理字段,自动生成,不过结构和oracle rowid不一样,可以看到是(blockid,itemid)

ctid在数据更改后也会变化。

利用ctid去除重复数据:

建立测试表,插入数据:

testuser=# create table t2 (id int,name varchar(20));

CREATE TABLE

testuser=# insert into t2 values (1,'apple');

INSERT 0 1

testuser=# insert into t2 values (1,'apple');

INSERT 0 1

testuser=# insert into t2 values (1,'apple');

INSERT 0 1

testuser=# insert into t2 values (2,'orange');

INSERT 0 1

testuser=# insert into t2 values (2,'orange');

INSERT 0 1

testuser=# insert into t2 values (2,'orange');

INSERT 0 1

testuser=# insert into t2 values (2,'orange');

INSERT 0 1

testuser=# insert into t2 values (3,'banana');

INSERT 0 1

testuser=# insert into t2 values (3,'banana');

INSERT 0 1

testuser=# select * from t2;

id | name

----+--------

1 | apple

1 | apple

1 | apple

2 | orange

2 | orange

2 | orange

2 | orange

3 | banana

3 | banana

查询重复的数据:

testuser=# select ctid,* from t2 where ctid in (select min(ctid) from t2 group by id);

ctid | id | name

-------+----+--------

(0,1) | 1 | apple

(0,4) | 2 | orange

(0,8) | 3 | banana

删除重复数据并查看结果:

testuser=# delete from t2 where ctid not in (select min(ctid) from t2 group by id);

DELETE 6

testuser=# select * from t2;

id | name

----+--------

1 | apple

2 | orange

3 | banana

(3 rows)

[1] [2]

30bs10wd2dc.png 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值