使用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