You can't specify target table for update in FROM clause含义:不能在同一表中查询的数据作为同一表的更新数据。
出现以上错误,是因为想将表自身的字段A的值作为被更新字段B的值而导致的。
"自身更新自身"的正确写法:
- UPDATE t_loan SET f_biddingAmount =
- (
- SELECT amount FROM(
- SELECT ln.*, ln.f_amount amount FROM t_loan ln
- ) lnnew WHERE lnnew.f_loanId = t_loan.f_loanId
- );
含义,查询t_loan中f_amount值作为f_biddingAmount被更新的值。
我们想达到的效果是将t_loan表中的f_amount值作为表自身f_biddingAmout被更新的值,
也就是将t_loan表中的f_biddingAmount都更新成f_amount的值。
我们也可以在每一个select,update后面跟上条件等执行SQL。
比如,在SELECT ln.*, ln.f_amount amount FROM t_loan ln后面加上WHERE条件等。
以上问题只针对mysql数据库使用这么麻烦的写法,oracle中针对这种需求写起来相对比较简单。
原文:http://blog.csdn.net/yhl_jxy/article/details/50856619