update 與select嵌套


1.用b表的結果為a表賦值

update student set hobby= (select hobby_name from hobby )

錯誤,提示“Subquery return more than one row"

update student set hobby= (select hobby_name from hobby limit 1)

執行ok

說明:查詢結果應該是一個唯一字段才能給前面的a表字段賦值。

 

2.用一個表的查詢結果給字段賦值

update student set hobby= (select hobby from student where studentid=1) where studentid=2

錯誤,提示You can't specify target table 'student' for update in FROM clause

解決辦法:把查詢結果作為臨時表b,再次查詢賦值

update student set hobby=

(select b.hobby from

(select hobby from student where studentid=1) as b

)

where studentid=2

執行ok

3.用同一個表的查詢結果作為條件

update student set status =2 where studentid in( select studentid from student where studentid<10 and status=0 order by studentid asc limit 0,1)

錯誤,提示#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

update student set status =2 where studentid in( select studentid from student where studentid<10 and status=0 order by studentid asc )

錯誤,提示You can't specify target table 'student' for update in FROM clause

解決辦法:

改變查詢方式,

 

update student set status =2 where studentid<10 and status=0 order by studentid asc limit 0,1
   或 把查詢結果作為臨時表b
update student a,( select studentid from student where studentid<10 and status=0 order by studentid asc limit 0,1) b set a.status =2 where a.studentid=b.studentid
 
或連接
update student a join ( select studentid from student where studentid<10 and status=0 order by studentid asc limit 0,1) b on a.studentid=b.studentid set a.status =2

 

 


免責聲明!

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



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