2012-08-02 56 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