我以前见过有人问过这个问题,但在 Postgres 中没有,而且没有 5 列。我正在使用 Postgres 9.4,我有一个很大的位置表,其中有一些重复项。我想检查 5 个字段是否重复,它们是:city,state,zipcode,latitudes,longitudes 我已经尝试过其他方法,例如 find rows that multiple columns are identical using SQL query但即使在我更改名称以匹配我的表和列之后,它仍然给我错误。我的很多行看起来像这样
- 伊利诺伊州芝加哥 60475 41.881 -87.6245
- 芝加哥伊利诺伊州 60475 41.853 -87.6846
- 伊利诺伊州芝加哥 60475 41.881 -87.6245
- 芝加哥伊利诺伊州 60475 41.890 -87.6273
有许多具有相同的城市、州、邮政编码和略有不同的纬度和经度。在上面的列表中,只有#1 和#3 是相同的,所以我想删除 1 而保留另一个。我正在尝试找到正确的方法来执行此操作而不删除额外的行任何建议都会很棒...... 我在查询时遇到了这个错误 错误:列引用“城市”不明确 第 1 行:选择城市、州
Select city,state
FROM zipss JOIN
(SELECT city,state, count(*)
FROM zipss
GROUP BY city,state
HAVING count(*) >=2) dupl on zipss.city = dupl.city and zipss.state = dupl.state;
最佳答案
在 Postgres 中,您可以使用 ctid
来达到这个目的。这是一个你真的不应该使用的内置列。但是,如果表上没有主键,那么它很有用:
delete from table
where ctid not in (select max(ctid)
from table t
group by city, state, zipcode, latitude, longitude
);
对于五列的每个组合,这应该保留具有最大 ctid
的行。
关于sql查询如何删除具有5列相同的行并在Postgres中保留1列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341830/