【问题标题】:Mysql update subquery specify target tablemysql更新子查询指定目标表
【发布时间】:2011-07-26 23:55:47
【问题描述】:

我无法通过选择表中已有的最高 final_id 并添加 +1 来更新 final_id。

下面的查询输出错误:“您无法在 FROM 子句中指定目标表 'customer_orders' 进行更新”,我很遗憾地看不到原因..

UPDATE customer_orders 
  SET final_id = (SELECT final_id FROM customer_orders ORDER BY final_id DESC)+1, 
      status = 2, 
      payment_id = '{$transaction_id}', 
      payment_type = '{$type}', 
      payment_reserved = '{$amount}', 
      payment_currency = '{$cur}', 
      payment_cardnopostfix = '{$postfix}', 
      payment_fraud_suspicious = '{$fraud}' 
  WHERE id = '{$order_id}'

我正在尝试为我系统中的最终订单设置一个唯一递增的 ID。

我希望有人能告诉我我做错了什么!

最好的问候

【问题讨论】:

    标签: mysql mysql-error-1093


    【解决方案1】:

    你可以重写你的查询并使用join

    UPDATE customer_orders 
    INNER JOIN (SELECT IFNULL(MAX(final_id),0) as max_id FROM customer_orders)a ON(1=1)
    SET final_id = a.max_id+1, status = 2, payment_id = '{$transaction_id}', 
    payment_type = '{$type}', payment_reserved = '{$amount}', 
    payment_currency = '{$cur}', payment_cardnopostfix = '{$postfix}',
    payment_fraud_suspicious = '{$fraud}' 
    WHERE id = '{$order_id}'
    

    【讨论】:

      【解决方案2】:

      将内部查询更改为SELECT max(final_id) FROM customer_orders

      【讨论】:

        【解决方案3】:

        试试这个:

         UPDATE customer_orders        
            SET final_id = MT.MaxId + 1           -- use the computed max id, and increment
              , status = 2
              , payment_id = '{$transaction_id}'
              , payment_type = '{$type}'
              , payment_reserved = '{$amount}'
              , payment_currency = '{$cur}'
              , payment_cardnopostfix = '{$postfix}'
              , payment_fraud_suspicious = '{$fraud}'
           FROM customer_orders
              -- include a subquery to determine the max id from the customer_orders table
              -- and assign 'MT' as the name of the results table
              , (SELECT MAX(final_id) as MaxId FROM customer_orders) MT
          WHERE id = '{$order_id}'
        

        【讨论】:

          猜你喜欢
          • 2011-12-26
          • 2019-11-16
          • 2020-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-08
          • 2012-04-18
          • 2016-02-07
          相关资源
          最近更新 更多