首頁 > 資料庫 > mysql教程 > oracle rowid在表行中的物理标识

oracle rowid在表行中的物理标识

WBOY
發布: 2016-06-07 15:03:36
原創
1188 人瀏覽過

欢迎进入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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板