Rumah > pangkalan data > tutorial mysql > oracle rowid在表行中的物理标识

oracle rowid在表行中的物理标识

WBOY
Lepaskan: 2016-06-07 15:03:36
asal
1190 orang telah melayarinya

欢迎进入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在表行中的物理标识

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan