mysql出現“ You can't specify target table '表名' for update in FROM clause”解決方法


You can't specify target table '表名' for update in FROM clause

翻譯為:不能先select出同一表中的某些值,再update這個表(在同一語句中)

 

實例:

表:result

表student

 

表:grade

要求:給大一成績不合格的分數加5分

 

思路:

第一步:查詢出大一成績不合格的成績集合

SELECT res.StudentResult
FROM student stu
JOIN result res on res.StudentNo=res.StudentNo
where res.StudentResult<60 and stu.GradeId=(SELECT GradeId
                                                                                        FROM grade
                                                                                        WHERE GradeName='大一'
)

第二步:修改不合格成績

UPDATE result 
SET StudentResult=StudentResult+5
WHERE StudentResult in( 
    (SELECT  res.StudentResult
                                                FROM student stu
                                                JOIN result res on res.StudentNo=res.StudentNo
                                                where res.StudentResult=53 and stu.GradeId=(SELECT GradeId
                                                                                        FROM grade
                                                                                        WHERE GradeName='大一'
                                                                                        )
    )

)

此時報錯:1093 - You can't specify target table 'result' for update in FROM clause 

正確寫法應該是:

UPDATE result 
SET StudentResult=StudentResult+5
WHERE StudentResult in( 

    SELECT a.StudentResult from
    (SELECT  res.StudentResult
                                                FROM student stu
                                                JOIN result res on res.StudentNo=res.StudentNo
                                                where res.StudentResult=53 and stu.GradeId=(SELECT GradeId
                                                                                        FROM grade
                                                                                        WHERE GradeName='大一'
                                                                                        )
    ) AS a

)

也就是說:把結果集當作一個表,自我查詢一遍

格式為:SELECT a.StudentResult  FROM

                (結果集)a


免責聲明!

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



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