2010-06-14 90 views
0

我試圖用子查詢更新一列MySQL表,並返回一個日期的子查詢,以及WHERE子句的另一個子查詢。有兩個子查詢的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) 

從MySQL發動機的響應是 「子查詢返回多個1行」。

回答

1

用途:

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 

這個錯誤是因爲:

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欄的值相同。

+0

謝謝OMG小馬。我瞭解我在查詢中的錯誤,現在它正在按預期進行更新。 Regards, July – 2010-06-14 23:45:33

1

這可能會讓你感到震驚,但你的一個子查詢返回多行!

在您設置的情況下,這是不允許的。這兩個子查詢中的每一個都必須返回一個且只有一行。或者沒有行。

對它自己執行每個子查詢並確定哪一個返回多行。如果他們不應該返回多於一行,那麼您的數據可能是錯誤的。如果他們應該返回多行,則要麼修改數據,以免它們(如我所預期的那樣)或添加LIMIT子句。或者在查詢之外添加一個聚合函數(如MAX),以正確地處理返回的多行。

+0

Charles,感謝您對子查詢的全面解釋。 乾杯! – 2010-06-14 23:46:08