这篇文章主要介绍了mysql中You can’t specify target table for update in FROM clause错误解决方法,需要的朋友可以参考下

MySQL中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 例如下面这个sql:

复制代码代码如下:

delete from tbl where id in 
(
        select max(id) from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
)

改写成下面就行了:

复制代码代码如下:

delete from tbl where id in 
(
    select a.id from 
    (
        select max(id) id from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
    ) a
)

也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。

You can't specify target table for update in FROM clause含义:不能在同一表中查询的数据作为同一表的更新数据。

例如:

我想查询t_user_asset的余额加上50000作为更新字段f_cashAmount的值,这样写是不行的。

[sql] view plain copy

  1. UPDATE t_user_asset SET f_cashAmount =
  2. (
  3. SELECT (ua.f_cashAmount+50000) cashAmount FROM t_user_asset ua WHERE ua.f_userId = 290
  4. )
  5. WHERE f_userId = 290

修改成以下写法就行,意思就是变个方向,在select外边套一层,让数据库认为你不是查同一表的数据作为同一表的更新数据:

[sql] view plain copy

  1. UPDATE t_user_asset SET f_cashAmount =
  2. (
  3. SELECT ub.cashAmount FROM
  4. (
  5. SELECT (ua.f_cashAmount+50000) cashAmount FROM t_user_asset ua WHERE ua.f_userId = 290
  6. ) ub
  7. )
  8. WHERE f_userId = 290

以上问题只针对mysql数据库

最新文章

  1. ZKWeb网站框架介绍
  2. get back to the slower clock rate that allows it to save more power
  3. HDU 2602(01背包)
  4. Ambient Occlusion
  5. win7 重启 IIS.
  6. 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见
  7. 在ASP.NET MVC中使用 Bootstrap table插件
  8. VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
  9. PowerDesigner15连接Oracle数据库并导出Oracle的表结构
  10. WeX5学习笔记-02
  11. c函数指针
  12. Vuejs——(9)组件——props数据传递
  13. TCP和UDP的区别和优缺点
  14. @Transactional注解事务不回滚不起作用无效
  15. jython 2.7.1 版本开发历史
  16. Python的第二次作业
  17. python将oracle中的数据导入到mysql中。
  18. Visual Studio 2013在线文档地址备案
  19. linux下错误 && 解决方法
  20. 推荐几个对象映射(Object-Object Map)的库

热门文章

  1. Python之抽象类、抽象方法
  2. LeetCode 20. 有效的括号( 括号配对 )
  3. C#中的 Stream
  4. HDU 4553 约会安排 (区间合并)【线段树】
  5. 打印星星 - Python
  6. P3353 在你窗外闪耀的星星
  7. java.util.List API解读
  8. 001.Linux开机启动过程
  9. BZOJ-2-4870: [Shoi2017]组合数问题 矩阵优化 DP
  10. 用户不在sudoers文件中,此事将被报告