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

时间:2016-10-05 12:26:49

标签: php mysql sql subquery

我在子查询的基础上更新记录,但它给了我错误

  

您无法在子句

中指定要更新的目标表

我的查询是

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"

我错在哪里以及这个问题的完美解决方案

2 个答案:

答案 0 :(得分:1)

我认为使用双子查询方法最简单(在您的情况下):

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,但我认为在这种情况下这有点复杂。

答案 1 :(得分:1)

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