2012-08-24 51 views
0

我有兩個表tableA和tableB,tableA是電話主記錄,tableB包含tableA電話記錄中最後一次轉換的更新狀態。我想爲tableB.status ='ERROR'中的所有記錄將值tableA.active更新爲b'0'。如何使用MySQL中的select更新

這是我來了與MySQL的聲明,但給我的錯誤(錯誤代碼:1242子查詢返回多個1行

UPDATE tableA set tableA.active = b'0' 
where 
tableA.phone = 
(Select phone from tableB where tableB.status='ERROR'); 
+0

題外話:我不禁懷疑是否'NULL '在這種情況下對'tableA.active'更合適。 – eggyal

回答

5

=不僅可以匹配一行,如該錯誤說。您可以使用IN代替:

UPDATE tableA set tableA.active = b'0' 
where 
tableA.phone IN 
(Select phone from tableB where tableB.status='ERROR'); 
+1

+1。詳細信息:[MySQL 5.6參考手冊] [§13.2.10.3「使用ANY,IN或SOME的子查詢]」(http://dev.mysql.com/doc/refman/5.6/en/any-in-some- subqueries.html)。 – ruakh

+0

由[由@ruakh提供](http://stackoverflow.com/questions/12114871/how-to-update-with-select-in-mysql/12114924#comment16196644_12114891),也可以使用'= ANY'和' =有些。 – eggyal

3

作爲替代@Mathieu Imbert's correct answer,您可以使用多臺UPDATE語法來聯接表:

UPDATE tableA JOIN tableB USING (phone) 
SET tableA.active = b'0' WHERE tableB.status = 'ERROR' 
+0

+1當然,這個例子比我的子查詢廢話更明顯... –