【问题标题】:Update Statement with Select sub select使用 Select sub select 更新语句
【发布时间】:2012-10-16 13:58:55
【问题描述】:

我怎样才能完成这项工作 - 给我 #1093 - 您不能在 FROM 子句中指定目标表“订单”进行更新

Update Orders set flag = 0 where orders_id = (select orders_id from orders ORDER BY orders_id DESC LIMIT 1)

【问题讨论】:

  • 试试Update Orders set flag = 0 where orders_id = (select min(orders_id) from Orders);

标签: mysql


【解决方案1】:

您需要将其包装在子查询中(创建一个临时表

Update Orders 
set flag = 0 
where orders_id = 
    (
        SELECT x.orders_id
        FROM
        (
            select orders_id 
            from orders 
            ORDER BY orders_id DESC 
            LIMIT 1
        ) x
    )

Update Orders 
set flag = 0 
where orders_id = 
    (
        SELECT x.orders_id
        FROM
        (
            select MAX(orders_id) orders_id 
            from orders 
        ) x
    )

【讨论】:

  • 在您的秒查询中应该是 MAX,因为 OP 通过 desc 对其进行排序
  • @AnandPhadke 因为您需要为它创建一个临时表。我会为你展示一个例子。请稍候:)
  • @JohnWoo 你能告诉我如何让 last_insert_id 与此更新语句一起使用,我知道它与 ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 有关,但它不适用于我!
  • @ManishPradhan 尝试ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID()
【解决方案2】:

您似乎正在尝试更新表格中的最后一个订单?试试

Update Orders set flag = 0 ORDER BY orders_id DESC LIMIT 1; 

Mysql 不支持在子查询中使用表时更新表..

【讨论】:

  • 为什么对这个答案投了负票,谁能解释一下,因为它工作得很好..?
  • 是的,我很好奇投反对票?它避免了创建临时表和子选择,并且只在 1 次更新中完成。
  • 你能告诉我如何让 last_insert_id 与这个更新状态一起工作吗,我知道它与 ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 有关,但它对我不起作用!
  • 不确定您在问什么? Last_insert_id 对更新没有任何意义?特别是如果重复键的一部分
  • 好的,让我解释一下,就像你说的,我正在尝试更新表格中的最后一个订单。您的查询做得很好,但我还需要更新的最后一行的 ID。是否可以通过向其中添加一些内容来使用您的 sql 查询?
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2010-11-06
  • 2017-01-15
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多