使用mysql我正在嘗試使用基於同一個表中的選擇條件更新表。下面是運行更新時收到錯誤:「你不能指定目標表‘訂單’的更新在FROM子句」在從同一表格中選擇更新的標準時更新記錄?
這裏是我運行
UPDATE `orders`
SET order_id = '10000'
WHERE order_id = (SELECT MAX(order_id)
FROM `orders`
WHERE user_id = 4
);
使用mysql我正在嘗試使用基於同一個表中的選擇條件更新表。下面是運行更新時收到錯誤:「你不能指定目標表‘訂單’的更新在FROM子句」在從同一表格中選擇更新的標準時更新記錄?
這裏是我運行
UPDATE `orders`
SET order_id = '10000'
WHERE order_id = (SELECT MAX(order_id)
FROM `orders`
WHERE user_id = 4
);
這裏是結束了對我的工作的解決方案:
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);
查詢嘗試使用這個:
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);
你需要的是給你的子查詢的別名。
你可以重寫查詢作爲這樣的:
UPDATE orders
SET order_id = '10000'
WHERE user_id = 4
ORDER BY order_id DESC
LIMIT 1;
如果你的條件是比這更復雜,則解決方法是將混疊臨時結果集爲烏斯曼Tiono指出。
我的數據庫管理員不會讓這個通過,但這將正常工作。好一個! :) – 2012-08-02 16:38:49
你的DBA爲什麼不讓這個通過?這不是一個資源muncher。 – 2012-08-02 16:42:18
如果你想獲得整個表的MAX沒有必要進行分組。它由PK隱式分組。 – 2012-08-02 16:35:59
哎呀你是對的。感謝您指出了這一點。 – 2012-08-02 16:37:10
這部分不會正常工作: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