我在子查询的基础上更新记录,但它给了我错误
您无法在子句
中指定要更新的目标表
我的查询是
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"
我错在哪里以及这个问题的完美解决方案
答案 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'。 请分两部分打破此查询,它将起作用。