更新基于具有多个匹配项的公共值

时间:2014-10-23 03:23:02

标签: mysql sql sql-update

我有两个表(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

我认为这是因为每个州的代码匹配时间不止一次,原因很简单,每个州有多个城市(而且它们都有相同的州/代码)。

我不确定如何更改它以使其正常工作 - 我确定它显而易见的东西我只是缺少,但我不知道如何处理这个问题。

1 个答案:

答案 0 :(得分:1)

这是您的查询:

UPDATE cities
    SET state_id = (SELECT id FROM states WHERE states.title = cities.stateAB);

您收到错误是因为statestitle列中有重复项。你可以通过运行找到这些:

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);