繁体   English   中英

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,并且有一个很大的位置表,其中包含一些重复项。 我想检查5个字段是否重复,这些字段是: city,state,邮政编码,纬度,经度我尝试了其他方法,例如使用SQL查询来查找多个列相同的行,但即使在我更改了名称以匹配表和列。 我的很多行都是这样的

  1. 芝加哥IL 60475 41.881 -87.6245
  2. 芝加哥IL 60475 41.853 -87.6846
  3. 芝加哥IL 60475 41.881 -87.6245
  4. 芝加哥IL 60475 41.890 -87.6273

有许多城市,州,邮政编码相同,并且纬度和经度略有不同。 在上面的列表中,只有#1和#3相同,所以我想删除1而保留其他。 我正在尝试找到正确的方法,而又不删除多余的行,那么任何建议都会很棒。。。在查询错误时出现此错误:列引用“ city”不明确LINE 1:选择city,state

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保持最大。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM