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

2018-06-18 01:43:20来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  在使用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 FROM

 

  My Sql的update的一些特点

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

    2、update 时,可以对多个表进行更新(Sql Server不行);

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

    3、update 后面可以做任意的查询,这个作用等同于FROM;

 

  所以My Sql update是不允许使用子查询的,正确写法是:

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;

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:MySQL用户管理

下一篇:MySQL高可用之MGR安装测试(续)