使用子查询更新记录时出错

vzgqcmou  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(321)

我正在子查询的基础上更新记录,但它给了我错误
不能在from子句中指定更新的目标表
我的问题是

UPDATE paymentinfo set customer_id = 
(
   SELECT transation.transactionid 
   FROM paymenttransaction AS transation 
   LEFT JOIN paymentinfo as payment 
   ON (transation.paymentinfoid=payment.paymentinfoid) 
   where payment.hash="0b576d33c57484692131471a847eab7c"
) 
WHERE hash="0b576d33c57484692131471a847eab7c"

我错在哪里?解决这个问题的最佳方法是什么

toiithl6

toiithl61#

我认为使用double subquery方法(在您的例子中)是最简单的:

UPDATE paymentinfo 
    SET customer_id = (SELECT transactionid
                       FROM (SELECT t.transactionid
                             FROM paymenttransaction pt LEFT JOIN
                                  paymentinfo pi
                                  ON t.paymentinfoid = pi.paymentinfoid
                             WHERE p.hash = '0b576d33c57484692131471a847eab7c'
                            ) t
                      ) 
    WHERE hash = '0b576d33c57484692131471a847eab7c';

通常情况下,您需要切换这些以使用 JOIN 但我觉得这件事有点复杂。

tvmytwxo

tvmytwxo2#

您正在更新“paymentinfo”表,同时使用此表在子查询中进行选择。请将此查询分为两部分,它将起作用。

相关问题