自我更新sql查询中的问题

时间:2017-07-04 13:19:49

标签: mysql sql join

我正在尝试根据同一个表和另一个表上的内部联接的值来更新表。

以下是查询: -

update coin_txn_normalization  cn 
SET cn.is_merchant_pay_rel='H' 
where cn.coin_txn_id IN(
   SELECT ctn.coin_txn_id 
   FROM hold  h 
   INNER JOIN coin_txn_normalization ctn
   ON h.txn_id = ctn.coin_txn_id
);

我收到以下错误

SQL Error (1093): Table 'cn' is specified twice, both as a target 
for 'UPDATE' and as a separate source for data 
Affected rows: 0  Found rows: 0  Warnings: 0  Duration for 0 of 1 query: 0.000 sec. 

我该如何解决这个错误。如果需要其他任何内容,请告诉我。

1 个答案:

答案 0 :(得分:2)

如您所知,MySQL并未在whereset条款中引用所有正在更新(或删除)的表格。

在您的情况下,这很容易解决:

update coin_txn_normalization  cn 
    set cn.is_merchant_pay_rel = 'H' 
    where cn.coin_txn_id in (select h.txn_id from hold);

无论如何,这是一个更简单的版本。如果hold中没有多个匹配项,那么join也是合适的:

update coin_txn_normalization cn join
       hold h
       on h.txn_id = cn.coin_txn_id
    set cn.is_merchant_pay_rel = 'H' ;