我有2个 mysql 表:
位置
location_geo
问题是位置表中至少1/4的城市是重复记录。我可以轻松运行此查询并删除重复的记录:
ALTER IGNORE TABLE location ADD UNIQUE INDEX idx (city);
但是之前这样做,我还必须使用唯一的城市ID更新location_geo表。例如,这是一种可能性:
位置
location_geo
location_geo 中的id_location字段应更新为位置表中的第一个可用ID,以便显示示例中的结果:
顺便说一下, location_geo 表中有2,021,182条记录。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
我会分三步完成。您没有指定RDBMS类型,因此这是非常通用的语法。
为新location_id
:
create table new_loc_map as
select a.id_location as old_loc
a.city
, b.id_location
from location a
join (
select city
, min(id_location) as id_location
from location
group by city
) b
on a.city=b.city
更新location_geo
表:
update location_geo
from new_loc_map
set location_geo.id_location=new_loc_map.id_location
where location_geo.id_location=new_loc_map.old_loc
创建一个新的location
表:
create table new_location as
(select distinct id_location
, city
from new_loc_map
)
unique index idx (location)
您的问题描述了在location
表上创建新的复合索引以删除重复项,但除非我不完全理解,否则您只需要location_id
上的索引。