如何删除重复行并保留一行多列

vol*_*one 2 postgresql postgresql-14

我在一个名为的表中有重复的数据bank_currency,如下所示:

currencyid | bankid
--------------------
8             1
8             1
8             1
16            2
16            2
16            2
14            3
14            3
14            3
Run Code Online (Sandbox Code Playgroud)

我不知道为什么数据被重复一式三份,但我需要删除所有重复项并仅保留每行之一。所以我最终是这样的:

currencyid | bankid
--------------------
8             1
16            2
14            3
Run Code Online (Sandbox Code Playgroud)

我无法ORDER BY或告诉 postgresql 要保留哪一行,因为它们是重复的bankidcurrencyid也许是一个订单ROW_NUMBER(如果可能的话)并保持最低ROW_NUMBER?任何建议都非常感激。

mäk*_*ksä 5

如果您的表没有 id 列,最好的选择可能是使用临时表:

CREATE TABLE bank_currency_temp AS
SELECT DISTINCT bankid, currencyid
FROM bank_currency;
Run Code Online (Sandbox Code Playgroud)

之后删除原来的表

DROP TABLE bank_currency
Run Code Online (Sandbox Code Playgroud)

然后重命名临时表

ALTER TABLE bank_currency_temp
RENAME TO bank_currency;
Run Code Online (Sandbox Code Playgroud)