SQL Update,子查询返回多行

时间:2012-08-28 16:27:28

标签: mysql subquery sql-update

Timezones
---------
-AreaCode varchar
-Timezone varchar

Contacts
--------
-Phone    varchar
-Timezone varchar

除联系人表格中的Timezone外,其他所有内容都已填充,因此我想查找每个电话号码的时区并更新联系人。这是我尝试做的,但是MySQL给出了

  

错误1242子查询返回多行

对于每个时区(0,-1,-2,-3,-4,-5),我执行此更新:

update contacts 
set contacts.timezone = '-1' 
where left(contacts.phone,3) = (Select timezones.areacode 
                                from timezones 
                                where timezones.timezone = '-1');

4 个答案:

答案 0 :(得分:2)

您的子查询返回多行。只需将“=”替换为“IN”即可解决此问题:

update contacts 
set contacts.timezone = '-1' 
where left(contacts.phone,3) in (Select timezones.areacode 
                                from timezones 
                                where timezones.timezone = '-1');

答案 1 :(得分:0)

尝试对更新或子查询进行内部联接:

update contacts 
set contacts.timezone = '-1' 
where left(contacts.phone,3) in (Select timezones.areacode 
                                from timezones 
                                where timezones.timezone = '-1');

答案 2 :(得分:0)

更改以下部分: ....

where left(...) in (select ...... ) 

答案 3 :(得分:0)

问题是,时区中有多于一行有t imezone column = '-1'

您可以在此使用Join

update contacts join timezones on left(contacts.phone,3) = timezones.areacode and timezones.timezone = '-1'
set contacts.timezone = '-1';

它会将isacodes与手机匹配,在这种情况下会更新为'-1'