2010-06-14 2 views
0

날짜를 반환하는 하위 쿼리와 WHERE 절의 다른 하위 쿼리로 MySQL 테이블의 한 열을 업데이트하려고합니다. 여기두 개의 하위 쿼리가있는 MySQL 업데이트

가 있습니다 : MySQL의 엔진

UPDATE wtk_recur_subs_temp 
    SET wtk_recur_date = (SELECT final_bb.date 
          FROM final_bb, wtk_recur_subs 
          WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 
WHERE wtk_recur_subs_temp.wtk_recur_msisdn IN (select final_bb.msisdn 
               from final_bb) 

반응은 "하위 쿼리는 1 개 이상의 행을 반환"입니다.

답변

1

사용 :

SET wtk_recur_date = (SELECT final_bb.date 
         FROM final_bb, wtk_recur_subs 
         WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 

...을 final_bb.date 값이 final_bbwtk_recur_subs MSISDN 열 값이 일치하는 모든 날짜 값입니다 :

UPDATE wtk_recur_subs_temp, 
     final_bb, 
     wtk_recur_subs 
    SET wtk_recur_subs_temp.wtk_recur_date = final_bb.date 
WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn 
    AND wtk_recur_subs_temp.wtk_recur_msisdn = final_bb.msisdn 

오류가 있기 때문이다.

+0

OMG 조랑말 감사합니다. 쿼리에서 내 오류를 이해하고 지금 예상대로 업데이트 중입니다. 감사합니다, 년 7 월 –

1

이것은 매우 충격적 일 수 있지만 하위 쿼리 중 하나가 둘 이상의 행을 반환합니다.

설정 한 상황에서는 허용되지 않습니다. 이 두 개의 하위 쿼리 각각은 하나의 행만 반환해야합니다. 또는 행이 없습니다.

각 하위 쿼리를 자체적으로 수행하고 둘 중 어느 행을 반환하는지 결정합니다. 둘 이상의 행을 반환하지 않으면 데이터가 잘못되었을 수 있습니다. 두 개 이상의 행을 반환해야하는 경우 데이터가 수정되지 않도록 데이터를 수정하거나 (예상 한대로) LIMIT 절을 추가해야합니다. 또는 쿼리 외부에 집계 함수 (예 : MAX)를 추가하여 반환되는 여러 행에 대해 적절한 작업을 수행 할 수 있습니다.

+0

찰스, 하위 쿼리에 대한 포괄적 인 설명 주셔서 감사합니다. 건배! –

관련 문제