Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用子查询更新记录时出错_Mysql_Sql_Subquery - Fatal编程技术网

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

Mysql 使用子查询更新记录时出错,mysql,sql,subquery,Mysql,Sql,Subquery,我正在子查询的基础上更新记录,但它给了我错误 不能在from子句中指定更新的目标表 我的问题是 UPDATE paymentinfo set customer_id = ( SELECT transation.transactionid FROM paymenttransaction AS transation LEFT JOIN paymentinfo as payment ON (transation.paymentinfoid=payment.payment

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

不能在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"
我错在哪里?什么是该问题的完美解决方案

我认为使用双子查询方法最简单(在您的案例中):

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

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

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

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

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

我将如何打破。你的意思是我使用两个查询而不是一个查询?我将如何中断。您的意思是我使用两个查询而不是一个查询?请尝试
UPDATE paymentinfo set paymentinfo.customer\u id
it oncrety
UPDATE paymentinfo set paymentinfo.customer\u id
it once引用字段时未正确使用表别名。引用字段时未正确使用表别名。