我有一个名为“cities”的表,其中包含“ID”,“state”和“cities”列。表中有一些重复的记录。我希望从表中找到并删除这些记录。请注意,只有当州和城市名称相同时,查询才能找到并删除记录。如何使用postgreSQl完成此操作。
答案 0 :(得分:2)
假设id
是唯一的(正如您的问题所暗示的那样),您可以将delete
与id
一起使用:
delete from cities c
where c.id > (select min(c2.id)
from cities c2
where c2.state = c.state and c2.cities = c.cities
);
如果id
也可以相同,则可以使用ctid
:
delete from cities c
where c.ctid > (select min(c2.ctid)
from cities c2
where c2.state = c.state and c2.cities = c.cities and
c2.id = c.id
);