如何在更新中生成select语句?

时间:2012-03-29 18:14:43

标签: mysql sql

我需要更新一个表,而Where子句应该包含某一列的最后一个(或最大值),所以我做了这个查询:

UPDATE Orders
SET Ordermethod='Pickup'
WHERE orderid IN (
  SELECT MAX(orderid)
  FROM Orders);

但是,由于某些原因我不明白,mysql会返回此错误:

  

1093 - 您无法在FROM子句

中指定目标表'Bestellingen'进行更新

我尝试了不同的查询,这些查询都不起作用...... 有人可以帮忙??

抱歉蹩脚的英语

2 个答案:

答案 0 :(得分:3)

这是MySQL的限制。 (正如the documentation所说:“目前,您无法更新表并从子查询中的同一个表中进行选择。”)您可以通过将子查询编写为(SELECT * FROM (SELECT ...) t)来解决限制,以便MySQL将为您创建一个临时表:

UPDATE Orders
   SET Ordermethod='Pickup'
 WHERE orderid IN
        ( SELECT *
            FROM ( SELECT MAX(orderid)
                     FROM Orders
                 ) t
        )
;

答案 1 :(得分:0)

  

更新订单   SET Ordermethod ='Pickup'   WHERE orderid IN(SELECT MAX(orderid)FROM                (                   SELECT * FROM Orders                )                    AS c1                    )