从没有主键的Postgresql表中删除重复记录?

12 sql postgresql

我有桌子

CREATE TABLE meta.fk_payment1
(
  id serial NOT NULL,
  settlement_ref_no character varying,
  order_type character varying,
  fulfilment_type character varying,
  seller_sku character varying,
  wsn character varying,
  order_id character varying,
  order_item_id bigint,
   ....
  );
Run Code Online (Sandbox Code Playgroud)

我从csv文件插入数据,其中所有列都相同而不是id列

如果csv文件上传的次数超过一次,则数据将重复.

但是id不会,而id是主键.

所以我想删除所有重复的行而不使用主键.

我必须在单桌上这样做

Shu*_*tra 13

你可以这样做, 例如

DELETE FROM table_name
    WHERE   ctid NOT IN
    (SELECT     MAX(dt.ctid)
        FROM        table_name As dt
        GROUP BY    dt.*);
Run Code Online (Sandbox Code Playgroud)

运行此查询

DELETE FROM meta.fk_payment1
    WHERE   ctid NOT IN
    (SELECT     MAX(dt.ctid)
        FROM        meta.fk_payment1 As dt
        GROUP BY    dt.*);
Run Code Online (Sandbox Code Playgroud)


Rob*_*ert 4

将不同的数据复制到工作表fk_payment1_copy。最简单的方法是使用into

SELECT max(id),settlement_ref_no ... 
INTO fk_payment1_copy
from fk_payment1
GROUP BY settlement_ref_no ... 
Run Code Online (Sandbox Code Playgroud)

删除所有行fk_payment1

delete from fk_payment1
Run Code Online (Sandbox Code Playgroud)

并将数据从fk_payment1_copy表复制到fk_payment1

insert into fk_payment1
select id,settlement_ref_no ... 
from fk_payment1_copy
Run Code Online (Sandbox Code Playgroud)