我需要检查城市>国家/地区和国家>国家/地区之间的匹配项,然后从国家/地区表中更新与id_country匹配的城市记录。最后,我将能够从城市表中删除“国家/地区”列。
城市表
国家/地区表
我不知道从哪里开始,以及是否可以使用SQL查询完成。我最初的想法是在php循环中搜索匹配,但这似乎是一个非常难的实现。
答案 0 :(得分:1)
您可以在UPDATE语句中使用JOIN执行此操作。
UPDATE city c1 INNER JOIN country c2 ON c1.country=c2.country
SET c1.id_country=c2.id_country;
使用INNER JOIN
可确保仅对具有匹配国家/地区价值的城市进行更新。
一旦你运行它,你将能够选择所有那些仍然具有空id_country的城市,以防其中一些不匹配。相反,一旦您确定所有城市都有id_country,您就可以从城市表中删除该列。
答案 1 :(得分:1)
城市表格未正常化,因为国家/地区信息是 用纯文本。
无意义。规范化并不意味着“用id号替换纯文本”。找一个教你的人,用尖锐的棍子戳他的眼睛。
您的真正的问题是“城市”加上“国家/地区”不足以识别城市,至少在美国是这样。我想在美国至少有十几个不同的城市名为“华盛顿”。
使用两个字母的国家/地区代码取代国家名称,而不是用ID号替换国家/地区名称。这些代码是人类可读的;在使用您的城市表的每个查询中,ID号都需要额外的JOIN。
答案 2 :(得分:0)
这样的事情应该有效:
UPDATE city set id_country = (SELECT country.id_country from country WHERE country.country = city.country)