我們在使用postgresql資料庫的時候,如果一張資料表在未做任何約束的情況下,很可能會出現幾條完全一樣的資料,即重復資料,如下圖所示:

那么如果我們要洗掉其中的2條該怎么辦呢?第一種我們可以清空表的內容,再使用INSERT INTO陳述句再將內容插入到表中,此方法可行,但對于專業人士來講,并不推薦
第二種我們可以結合pg資料庫中的ctid(和物理存盤有關,指的是一條記錄位于哪個資料塊的哪個位移上面)來進行洗掉,這里我們使用依然先使用SELECT陳述句進行查詢,

這樣我們就可以使用唯一標識的ctid對重復資料進行洗掉操作,使用以下兩種方式都可以洗掉tb_5201351表中2條資料,
DELETE FROM tb_5201351 WHERE ctid in ('(0,2)','(0,3)');
上面的方法原理是我們依次手工輸入要洗掉指定ctid對應的資料,如果資料較多的話,我們還可以使用如下陳述句進行洗掉,
DELETE FROM tb_5201351 WHERE ctid not in (select min(ctid) from tb_5201351);
執行后的結果如下圖所示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200207.html
標籤:其他
