1. 程式人生 > >PostgreSql中使用ctid去重

PostgreSql中使用ctid去重

         最近的開發中使用PostgreSql時也遇到了去重的問題,開始的時候確實一籌莫展,不像Oracle有rowid這樣的欄位(是因為我不知道pg中也有類似的欄位),因此就在文件中找類似的欄位,於是想起了幾個系統欄位來,這邊著重就看解決問題的ctid。

        ctid是一個表中物理上確認版本的欄位,這是個系統欄位,只要表中存在資料那麼就會存在這個欄位,與oid不同。要想使用OID,建立表時應該帶上with oid。

 在一個表中ctid是唯一的,那麼就符合了去重的先決條件。於是,在下面的情況下,

"ctid""id""name_1""name_2""name_3"
"(0,133)""3" "name_13""name_23""name4444"
"(1,119)""3" "name_13""name_23""name4444"

很明顯兩條資料一樣,只需要保留一條。那麼就得這樣做,

select * from mytest6 where ctid in (
select min(ctid) from mytest6 where id = 3);

當然這是知道只有id=3時會出現這樣的情況,假如不止這一條,那麼就得這麼做,

select * from mytest where ctid in (
select min(ctid) from mytest group by id);

寫法可以很多,也可以不用in,而使用表關聯。但是大致的解決思路就是這樣。

相關推薦

PostgreSql使用ctid

         最近的開發中使用PostgreSql時也遇到了去重的問題,開始的時候確實一籌莫展,不像Oracle有rowid這樣的欄位(是因為我不知道pg中也有類似的欄位),因此就在文件中找類似的欄位,於是想起了幾個系統欄位來,這邊著重就看解決問題的ctid。    

Python hash

現在有3000條資料,需要插入到資料庫中去,使用的是對連結進行MD5加密, hashcode = md5(str(item_url)) 然後在資料庫中設定 hashcode 為UNIQUE索引 3000條資料全部插入完畢,耗時是32s 不使用MD5加密,耗時30秒。(https://ww

Python

一、列表去重 1、迴圈去重 list_1 = [5,5,1,4,4,6,7,8,1] new_list = [] for i in list_1: if i not in new_list: new_list.append(i) print(new_list)

【Python】Pythonlist的幾種方法

目錄 方法一: 方法二: 方法三: 方法四: 方法一: 直接使用set def set_duplicate_removal(): lis = [1, 2, 2, 3, 7, 7, 9, 9, 10, 10] lis = set(lis) p

Hive :distinct,group by與ROW_Number()視窗函式

一、distinct,group by與ROW_Number()視窗函式使用方法 1. Distinct用法:對select 後面所有欄位去重,並不能只對一列去重。 (1)當distinct應用到多個欄位的時候,distinct必須放在開頭,其應用的範圍是其後面的所有欄位,而不只是緊挨著它的一個欄位,而且di

漫談redis在運維資料分析統計方式

今天,我和大家分享下redis在運維資料分析中的去重統計方式。為了避免混淆,本文中對於redis的資料結構做如下約定: SET:saddkey member ZSET:zaddkeyscoremember HYPERLOGLOG:pfaddkeyelement

JavaScript陣列的幾種常用方法

專案中經常會處理一些資料,像一個json資料,裡邊全是陣列,要把所有的資料的相同的屬性值放在一個數組裡,然後再判重,獲取最終的資料,所以就會經常用到陣列判重,於是找了幾個常用的方法。如下: 第一種:先把原陣列的第一個值傳進新陣列,然後從索引為1開始遍歷原陣列

ArrayList元素問題

如題所示,如果一個ArrayList中包含多個重複元素,該如何去重呢? 思路一以及實現: 宣告2個ArrayList,分別為listA與listB ,listA為待去重list ,listB 儲存去重之後資料 。遍歷listA ,然後判斷listB中是否包含各個元素,若不包

pythonset注意事項

python中set結構是 唯一的可被雜湊的(hashable)物件(object)的無序的集合。也就是說set內的元素必須是可被雜湊的。 有時候我們需要使用set結構來檢測兩個列表或其它的資料型別的

javascript陣列的五種方法

第一種:                           var ary=[1,4,2,3,6,4,7,8,4,2]; for(var i=0;i<ary.length;i++){while

javaHashSet的方法

package day8_15; import java.util.HashSet; import java.util.Set; class Employee{ private int no ; private String name; public Employee(

python陣列

source = ['a','a','b','c','d','d'] dest = [] for e in source: if e not in dest: dest.appe

SQLServer查詢資料後,插入表問題

1、問題描述 表A,正式表,待插入資料 表B,臨時表,格式與A相同,臨時資料,存在重複資料 2、問題解決 此解決方案未對超過10W的資料量進行測試 主要是針對col4列資料進行去重處理 INSERT into A(col1,col2,col3,col

在tp資料並獲取自定義欄位

在專案中用到了TP的去重功能,將其中的坑和一些收穫記錄下來 用文件中提供的distinct方法去重只能獲取資料中能獲取field中的欄位資料,程式碼如下 //會員模型 $member_mod

關於導入數據到Excel對數據庫進行以及對導入的Excel文件進行

導入 hash list() exc 數據 clear arraylist equals 需要 插入到數據庫去重: 1.將你循環讀取的List進行遍歷 2.在你即將插入到數據庫的方法之前獲取你需要查詢的數據,執行查詢方法 1 devList=deviceDao.findD

二維數組按子數組首個元素值

() 二維 過程 spl each [] 數據 發送 需要 後臺更新了算法,用來挖掘數據,前臺(我)配合後臺搭建了新頁面,歷時兩周,從 0 到 現在的聯調完畢,呼呼,有累,但更多的是完成工作後的喜悅。 廢話不多說,聯調過程中遇到一個接口需要傳輸二維數組,是關於選擇句子,然後

怎麽對數組的對象

name gen ext amp spa doc fun aaa turn var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6

總結Javascript數組各種的方法

dex pre -1 去重 實現 demo 很多 數組去重 con 相信大家都知道網上關於Javascript中數組去重的方法很多,這篇文章給大家總結Javascript中數組各種去重的方法,相信本文對大家學習和使用Javascript具有一定的參考借鑒價值,有需要的下面來

從給數組的對象看Javascript的reduce()

[] 一個數 true 新增 ava index filter 設有 指定 假設有這樣一個數組: let person = [ {id: 0, name: "小明"}, {id: 1, name: "小張"}, {id: 2, na

【python常見面試題】之python 對list的多種方法

ont dex 如果 原來 簡單 div set方法 ron 職位 在python相關職位的面試過程中,會對列表list的去重進行考察。(註意有時會要求保證去重的順序性) 1、直觀方法 1 li=[1,2,3,4,5,1,2,3] 2 new_li=[] 3 for