2017-03-25 33 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中不一样。 –