2012-10-16 55 views
0

我怎樣才能使這項工作 - 給我#1093 - 您不能在指定目標表「訂單」的更新FROM子句與選擇子更新語句選擇

Update Orders set flag = 0 where orders_id = (select orders_id from orders ORDER BY orders_id DESC LIMIT 1) 
+0

嘗試'更新訂單設置標誌= 0其中orders_id =(從選擇的訂單分鐘(orders_id));' – venkatKA

回答

1

你需要把它包在一個子查詢(創建臨時表

Update Orders 
set flag = 0 
where orders_id = 
    (
     SELECT x.orders_id 
     FROM 
     (
      select orders_id 
      from orders 
      ORDER BY orders_id DESC 
      LIMIT 1 
     ) x 
    ) 

Update Orders 
set flag = 0 
where orders_id = 
    (
     SELECT x.orders_id 
     FROM 
     (
      select MAX(orders_id) orders_id 
      from orders 
     ) x 
    ) 
+0

[在DELETE問題上有點類似](http://stackoverflow.com/a/7378713/491243) –

+1

: - 很好,我從來沒有想過它會工作.... Gr8回答:) – Salil

+0

它應該是在你的秒查詢MAX因爲OP是通過desc – AnandPhadke

0

它看起來像你試圖更新表中的最後一個訂單?嘗試

Update Orders set flag = 0 ORDER BY orders_id DESC LIMIT 1; 

MySQL不支持而在子查詢中使用它更新表..

+0

爲什麼會有這樣的負面投票答案,任何人都可以解釋,因爲它工作得很好..? –

+0

是的,我很好奇downvote?它避免了創建臨時表和子選擇,並且只是在1次更新中完成。 – Doon

+0

你能告訴我怎樣才能得到last_insert_id來處理這個更新statemtent,我知道它與ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)有關,但它不適合我! –