zoukankan      html  css  js  c++  java
  • 关于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 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;
  • 相关阅读:
    UVA 11995
    LA 5031
    防卫导弹
    跳马问题
    UVA 11992
    POJ 3264 Balanced Lineup
    0-1背包
    石子合并
    小技巧
    Android广播中有序和无序的区别
  • 原文地址:https://www.cnblogs.com/liuchenxing/p/9178665.html
Copyright © 2011-2022 走看看