2012-08-02 58 views
0

使用mysql我正在嘗試使用基於同一個表中的選擇條件更新表。下面是運行更新時收到錯誤:「你不能指定目標表‘訂單’的更新在FROM子句」在從同一表格中選擇更新的標準時更新記錄?

這裏是我運行

UPDATE `orders` 
    SET order_id = '10000' 
WHERE order_id = (SELECT MAX(order_id) 
        FROM `orders` 
        WHERE user_id = 4 
       ); 

回答

1

這裏是結束了對我的工作的解決方案:

UPDATE `orders` 
    SET order_id = '10000' 
WHERE order_id IN(SELECT MAX(order_id) 
     FROM (SELECT order_id 
     FROM `orders` WHERE user_id = 4) 
     tmp); 
0

查詢嘗試使用這個:

UPDATE orders SET order_id = '10000' 
WHERE order_id = (SELECT tmp.order_id FROM (SELECT MAX(order_id) order_id FROM orders WHERE user_id = 4) AS tmp); 

你需要的是給你的子查詢的別名。

+1

如果你想獲得整個表的MAX沒有必要進行分組。它由PK隱式分組。 – 2012-08-02 16:35:59

+0

哎呀你是對的。感謝您指出了這一點。 – 2012-08-02 16:37:10

+0

這部分不會正常工作:SELECT tmp.order_id FROM(SELECT MAX(order_id)order_id FROM orders WHERE user_id = 4)AS tmp – 2012-08-02 16:37:11

1

你可以重寫查詢作爲這樣的:

UPDATE orders 
    SET order_id = '10000' 
    WHERE user_id = 4 
    ORDER BY order_id DESC 
    LIMIT 1; 

如果你的條件是比這更復雜,則解決方法是將混疊臨時結果集爲烏斯曼Tiono指出。

+0

我的數據庫管理員不會讓這個通過,但這將正常工作。好一個! :) – 2012-08-02 16:38:49

+0

你的DBA爲什麼不讓這個通過?這不是一個資源muncher。 – 2012-08-02 16:42:18