日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

oracle 查询不同编号的时间最小记录_投稿 | ORACLE amp; PostgreSql 利用伪列删除完全重复的两行...

發(fā)布時(shí)間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 查询不同编号的时间最小记录_投稿 | ORACLE amp; PostgreSql 利用伪列删除完全重复的两行... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:繆曉麗

DBA、數(shù)據(jù)庫(kù)愛好者、從業(yè)10年。對(duì) DB2、PostgreSQL、Oracle 均有較長(zhǎng)的運(yùn)維經(jīng)驗(yàn)。

本次演示的 test 表如下:

01

Oracle 的 rowid

SQL 語(yǔ)句:

DELETE FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS rn, id, name
FROM test
)
WHERE t.rn = 2結(jié)果:刪除不成功。

原因:delete from 后的子查詢就是視圖,視圖是不支持 DML 操作的。

此時(shí) rowid 派上用場(chǎng),rowid 是一個(gè)偽列,并不實(shí)際存儲(chǔ)在表中,也不占用物理數(shù)據(jù)文件,它只是標(biāo)記表中每條數(shù)據(jù)的物理位置。

格式如下:

第一部分 6 位表示:該行數(shù)據(jù)所在的數(shù)據(jù)對(duì)象的 data_object_id;?

第二部分 3 位表示:該行數(shù)據(jù)所在的相對(duì)數(shù)據(jù)文件的 id;?

第三部分 6 位表示:該數(shù)據(jù)行所在的數(shù)據(jù)塊的編號(hào);?

第四部分 3 位表示:該行數(shù)據(jù)的行的編號(hào);

可通過 dbms_rowid 系列函數(shù)查看 ROWID 的相關(guān)信息。

用 ROWID 代替 ID 排序。

SQL 語(yǔ)句:

DELETE FROM test
WHERE rowid = (
SELECT ROWID
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY rowid) AS RN, ID
FROM TEST
)
WHERE RN = 1
);

結(jié)果:刪除成功。

02

PostgreSQL 的 CTID

PostgreSQL 并沒用 ROWID 偽列,但是有 ctid。

ctid 的結(jié)構(gòu)較 rowid 簡(jiǎn)單,如下:?

格式:(Data block, Row);

Data block: 記錄所在的數(shù)據(jù)塊編號(hào);

Row: 記錄的行編號(hào)。

其中 0 代表第 0 塊,1 和 2 代表第 1 行和第 2 行。

刪除思路相同,且 PostgreSQL 支持窗口函數(shù)。

SQL 語(yǔ)句

DELETE FROM test
WHERE ctid = (
SELECT ctid
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ctid) AS rn, id, ctid
FROM TEST
)
WHERE rn = 1
);

但是刪除時(shí)報(bào)錯(cuò)了:

子查詢需要加別名。

DELETE FROM test
WHERE ctid = (
SELECT t.ctid
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ctid) AS rn, id, ctid
FROM TEST
) t
WHERE t.rn = 1
);

結(jié)果:刪除成功。

長(zhǎng)期征稿·

恩墨學(xué)院公眾號(hào)開啟長(zhǎng)期征稿,只要你有好的技術(shù)相關(guān)文章,歡迎投稿到:

edu_mkt@enmotech.com

有機(jī)會(huì)獲得恩墨學(xué)院周邊獎(jiǎng)勵(lì)、恩墨學(xué)院精品課程以及培訓(xùn)優(yōu)惠卷。

總結(jié)

以上是生活随笔為你收集整理的oracle 查询不同编号的时间最小记录_投稿 | ORACLE amp; PostgreSql 利用伪列删除完全重复的两行...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。