> 데이터 베이스 > MySQL 튜토리얼 > oracle rowid在表行中的物理标识

oracle rowid在表行中的物理标识

WBOY
풀어 주다: 2016-06-07 15:03:36
원래의
1202명이 탐색했습니다.

欢迎进入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] 

oracle rowid在表行中的物理标识

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿