翻译:在同一语句中,不能先select出同一表中的某些值,再update这个表,即不能依据某字段值做判断再来更新某字段的值。
例如:
<!--班级内最后一个学生转出,则此班级在此课时之后的clazzPlan都是已结束-->
<update id="changeStatus" parameterType="com.fable.edu.entity.EduClazzPlan">
UPDATE edu_clazz_plan
SET status =#{status}
WHERE
id >= (
SELECT id
FROM edu_clazz_plan
WHERE clazz_code = #{clazzCode}
)
and clazz_code = #{clazzCode}
</update>
解决:
将SELECT出的结果再通过中间表SELECT一遍。
<!--班级内最后一个学生转出,则此班级在此课时之后的clazzPlan都是已结束-->
<update id="changeStatus" parameterType="com.fable.edu.entity.EduClazzPlan">
UPDATE edu_clazz_plan
SET status =#{status}
WHERE
id >= (
select a.id from (
SELECT
id
FROM edu_clazz_plan
WHERE clazz_code = #{clazzCode} and lesson_arrange_code = #{lessonArrangeCode}
) as a
)
and clazz_code = #{clazzCode}
</update>
以上。