我有两个表(MySQL数据库),一个叫做城市(有列" state_id'和' stateAB' - state_id是我想要的行fill,stateAB是状态的双字母代码 - 我希望它作为键值。)
我还有另一张名为州的表格(其中包含列' id' [这是我希望进入' state_id'' city'字段的值#39 ;]和一个标题'字段[2个字母的州代码]作为共同键值。)
我想用一个简单的:
UPDATE cities SET state_id=(SELECT id FROM states WHERE states.title=cities.stateAB)
理念是将state_id设置为2字母代码匹配时返回的id。
问题是返回以下内容:
#1242 - Subquery returns more than 1 row
我认为这是因为每个州的代码匹配时间不止一次,原因很简单,每个州有多个城市(而且它们都有相同的州/代码)。
我不确定如何更改它以使其正常工作 - 我确定它显而易见的东西我只是缺少,但我不知道如何处理这个问题。
答案 0 :(得分:1)
这是您的查询:
UPDATE cities
SET state_id = (SELECT id FROM states WHERE states.title = cities.stateAB);
您收到错误是因为states
在title
列中有重复项。你可以通过运行找到这些:
select title, count(*) as numdups
from states
group by title
having count(*) > 1;
您可能不关心重复项,很高兴在匹配时只选择一个ID(一致)。如果是这样,你可以这样做:
UPDATE cities
SET state_id = (SELECT MIN(id) FROM states WHERE states.title = cities.stateAB);