zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第18课 类型萃取(2)_获取返回值类型的traits
    第17课 类型萃取(1)_基本的type_traits
    【ASP.NET MVC系列】浅谈数据注解和验证
    【ASP.NET MVC系列】浅谈NuGet在VS中的运用
    【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
    【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
    【Java系列】Eclipse与Tomcat
    【java系列】java开发环境搭建
    【设计模式篇】工厂模式
    【架构篇】OCP和依赖注入
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/13605337.html
Copyright © 2011-2022 走看看