2012-08-24 4 views
0

나는 tableA와 tableB라는 두 개의 테이블을 가지고 있는데, tableA는 전화 마스터 레코드이고 tableB는 tableA의 전화 레코드 내의 마지막 트랜 션션의 업데이트 상태를 포함합니다. tableB.status = 'ERROR'의 모든 레코드에 대해 값 tableA.active를 b'0 '으로 업데이트하려고합니다.MySQL에서 선택하여 업데이트하는 방법

이 내가 함께 제공된 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 Reference Manual의 [§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/howest-to-select-in-mysql/12114924#comment16196644_12114891), 또한 '= ANY'와' = SOME'. – 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 물론 내 하위 쿼리 넌센스보다 분명합니다 ... –

관련 문제