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

  • 相关阅读:
    字节跳动--今日头条iOS客户端启动速度优化
    RSA加密
    几种浏览器
    Linux定时任务crontab无法执行
    Python报错ImportError: No Module Named Typing的解决
    微信小程序:A、B两个小程序相互跳转,出现点击A小程序底部导航栏菜单,第一次点击无法跳转B小程序,需要点击第二次才会触发跳转到B小程序
    c# core 生成随机图文验证码
    携程Apollo统一配置管理中心
    WPF程序中嵌入winForm窗体
    sqlserver 转 postgresql
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/13605337.html
Copyright © 2011-2022 走看看