Search Postgresql Archives

Re: SQL for Deleting all duplicate entries

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/5/07, Håkan Jacobsson <hakan.jacobsson99@xxxxxxxxxxxx> wrote:
> Hi,
>
> I want to create a DELETE statement which deletes duplicates
> in a table.
>
> That is, I want to remove all rows - but one - having three
> columns with the same data (more columns exist and there the
> data varies).

Assuming you've got a KNOWN unique id field (adding one if you don't)
you can do something like:

select * from table t1 join table t2 on (t1.field1=t2.field1 AND
t1.field2=t2.field2 AND t1.field3=t2.field3 AND t1.uid>t2.uid)

That should get the ids of all but one of the matching rows.  then
just use that in a subselect:

begin;
delete from table where uid in (select * from table t1 join table t2
on (t1.field1=t2.field1 AND t1.field2=t2.field2 AND
t1.field3=t2.field3 AND t1.uid>t2.uid) );
(check for dups / lost data)
commit;
or something like that.

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux