1
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

4 回答 4

2

您的子查询返回不止一行。只需将“=”替换为“IN”即可处理此问题:

update contacts 
set contacts.timezone = '-1' 
where left(contacts.phone,3) in (Select timezones.areacode 
                                from timezones 
                                where timezones.timezone = '-1');
于 2012-08-28T16:35:20.367 回答
0

在更新或子查询上尝试内部联接:

update contacts 
set contacts.timezone = '-1' 
where left(contacts.phone,3) in (Select timezones.areacode 
                                from timezones 
                                where timezones.timezone = '-1');
于 2012-08-28T16:33:58.993 回答
0

更改 where 部分,例如: ....

where left(...) in (select ...... ) 
于 2012-08-28T16:34:15.777 回答
0

问题是时区中可能有超过 1 行具有 timezone column = '-1'

你可以在Join这里使用

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

它将区号与电话匹配,在这种情况下将更新为'-1'

于 2012-08-28T16:34:46.357 回答