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

  • 相关阅读:
    测试websocket
    goreplay-测试app的真实流量
    apache -ab
    微信公众平台开发(69)百度地图导航
    微信公众平台开发(70)经济指标财经大事
    微信公众平台开发(68)苹果IMEI查询
    微信公众平台开发(67)百度百科
    微信公众平台开发(66)人品计算
    微信公众平台开发(65) 微博树洞
    微信公众平台开发(64)航班动态
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/13605337.html
Copyright © 2011-2022 走看看