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)
将不同的数据复制到工作表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)