![](/img/trans.png)
[英]Comparing 1 column of non-unique values to another column of non-unique values
[英]Enforcing uniqueness on PostgreSQL table column after non-unique values already inserted
我已经在一个表中插入了8000万条记录,但是需要确保几列是唯一的。 但是,这些列已经包含非唯一数据,因此ALTER TABLE不起作用。
我想要一个查询,该查询可以让我轻松删除不唯一的记录,同时保留其中一个记录,或者一个查询,该查询可以让我将当前表中的数据加载到新的记录中,同时过滤唯一性。
您要查找的查询是:
select distinct on (my_unique_1, my_unique_2) * from my_table;
这会针对上distinct on
每种列组合选择一行。 实际上,它始终是第一行。 由于没有可靠的顺序返回行(因此这是第一个),因此很少使用它而没有order by
。
通过order by
组合,您可以选择第一行(这使行的last_update_date值最大):
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
现在,您可以将其选择到新表中:
create table my_new_table as
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
或者,假设row_id
是主键,则可以将其用于删除:
delete from my_table where row_id not in (
select distinct on (my_unique_1, my_unique_2) row_id
from my_table order by my_unique_1, my_unique_2, last_update_date desc);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.