關於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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM