关于My Sql update语句不能用子查询的解决办法

  在使用My Sql数据库语法操做update时,第一时间想到的是一下写法:数据库

UPDATE purchase_request_detail SET convert_to_voucher_id=2, convert_to_voucher_type='inventory-voucher' WHERE detail_id IN (select detail_id from purchase_request_detail where request_id=1 and item_id=1) ;

  可是这个时候就会报错:You can't specify target table 'xxx' for update in FROMspa

 

  My Sql的update的一些特色code

    一、update 时,更新的表不能在set和where中用于子查询;blog

    二、update 时,能够对多个表进行更新(Sql Server不行);ci

             如:update table_a A,table_b B set A.B_ID=B.ID ,B.A_ID=A.ID;  get

    三、update 后面能够作任意的查询,这个做用等同于FROM;it

 

  因此My Sql update是不容许使用子查询的,正确写法是:table

UPDATE purchase_request_detail AS table_1 INNER JOIN (select detail_id from purchase_request_detail where request_id=1 and item_id=1) AS table_2 SET convert_to_voucher_id=2, convert_to_voucher_type='inventory-voucher'  WHERE table_1.detail_id = table_2.detail_id;
相关文章
相关标签/搜索