1 回答
TA贡献1886条经验 获得超2个赞
如果我理解正确,为了将新列表与旧列表匹配,您将必须匹配城市名称。虽然这并不理想,但它可能是唯一可用的解决方案。
如果您的城市名称是唯一的,那没问题。但如果它们不是唯一的(Springfield AK、Springfield CA、Springfield CO、Springfield GA、Springfield ID、Springfield IL、Springfield IN 等),您将需要更多信息来匹配。此外,拼写错误(springfield vs springfiled)将破坏您规范化数据库的原因......
第一步,将新信息添加到新表中。我将其称为新信息...
newinfo
----------
first_name
last_name
city
因此假设城市名称是唯一的,下一步是将所有新的唯一城市名称添加到cities. 如果你有一个唯一的索引cities.name,你可以简单地
insert ignore into cities('name') select city from newinfo
否则,您必须加入表以查找新值:
insert into cities ('name')
select newinfo.city
from newinfo
left join cities on newinfo.city=cities.name
where cities.name is null
现在您的cities表中有所有可能的城市,您需要插入所有新名称。考虑如何获取需要插入的信息:
select newinfo.first_name, new info.last_name, cities.id
from newinfo
inner join cities on new info.city=cities.name
然后,当您对获得正确的数据感到满意时,插入它:
insert into users
values('first_name','last_name','city_id')
select newinfo.first_name, new info.last_name, cities.id
from newinfo
inner join cities on new info.city=cities.name
现在您已经完成了表 newinfo 并且可以将其删除。
- 1 回答
- 0 关注
- 167 浏览
添加回答
举报