2012-08-28 249 views
1
Timezones 
--------- 
-AreaCode varchar 
-Timezone varchar 

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

一切除了填充在聯繫人表Timezone,所以我想查找每個電話號碼的時區和更新的聯繫人。這就是我試圖這樣做,但MySQLSQL更新,子查詢返回多行

錯誤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'); 
+2

唔,你已經驗證了,真的是* *僅適用於每個ID對應一個時區? –

+0

我剛剛檢查過,時區表 – user1630799

+0

中沒有重複的區域碼我詢問重複的「時區」值,而不是重複的區域碼。 –

回答

2

Y我們的子查詢返回多行。只需更換「=」和「IN」來處理這個問題:

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

太棒了!謝謝 – user1630799

0

嘗試在更新內連接或子查詢:

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

更改其中的一部分,如: ....

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

的問題是,可能有超過1行中具有時區牛逼imezone column = '-1'

您可以使用Join這裏

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

它將匹配區域碼與手機,並在這種情況下將更新與'-1'