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