如何解决当所有元组在重复项和原始元组中都相同时,如何删除重复项却保留一个?在PostgreSQL中
假设我们有下表。
如何删除2个重复项并保留一个?我的代码删除了所有这些代码。
+----+-------+
| ID | NAME |
+----+-------+
| 2 | ARK |
| 3 | CAR |
| 9 | PAR |
| 9 | PAR |
| 9 | PAR |
+----+-------+
解决方法
理想情况下,您的表应具有唯一的ID。如果没有,则可以使用ctid作为虚拟唯一ID字段,如下所示。
ctid表示行版本在其表中的物理位置。请注意,尽管可以使用ctid快速定位行版本,但是如果通过VACUUM FULL更新或移动了该行的ctid,则该ctid将会更改。因此,ctid不能用作长期行标识符。但这在这里起到了作用。
delete from my_table a using my_table b where a=b and a.ctid < b.ctid;
DB小提琴链接-https://dbfiddle.uk/?rdbms=postgres_10&fiddle=4888d519e125dc095496a57477a60b9f
,您可以使用deletion by row_number
Delete from table t1 where 1<(
Select rn from ( select id,name,row_number() over (partition by id,name
order by id) rn from table)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。