2017-03-25 34 views
0
在我的表中的行

情況如下:PostgreSQL的:如何刪除偶數行

col1 col2 col3 
    a  b  c 
    a  b  c 
    a  b  c 
    d  e  f 
    d  e  f 

我使用ROW_NUMBER

col1 col2 col3 rn 
    a  b  c  1 
    a  b  c  2 
    a  b  c  3 
    d  e  f  1 
    d  e  f  2 

列舉了他們,我想刪除其中有每一行甚至價值。

我該怎麼做?我的想法是使用row_number,但也許有另一種解決方案。

問候

+1

您是否正在尋找從表格中刪除重複項目,還是隻尋找具有偶數值的行? – puzeledbysql

+0

「刪除」是什麼意思?實際上是在表中刪除行,還是在執行SELECT時不輸出? –

+0

@puzeledbysql其實,我的意思是重複,但如果在例4中有相同的行,我想離開2 – user6808217

回答

0

這是痛苦的,因爲你沒有一個唯一的值來標識每行。您可以使用ctid在飛行要做到這一點:

delete from t 
    using (select t2.*, ctid as orig_ctid, 
       row_number() over (partition by col1, col2, col3 order by ?) as seqnum 
     from t t2 
     ) t2 
    where t2.orig_ctid = t.ctid and 
     mod(seqnum, 2) = 0; 

具有串行列是一個更好的主意,不過,不是依靠ctid

+0

我有刪除t附近的語法錯誤。我使用PostgresSQL 9.5 – user6808217

+0

@ user6808217。 。 。哎喲。我使用'update'語法而不是'delete'語法。我不知道他們爲什麼在Postgres中不一樣。 –