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