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不会出现此问题。

(0)

相关推荐

  • 读取mysql一个库下面的所有的表table

    我们先来看代码: <?php require 'class/db.php'; $sql = "select * from information_schema.tables where table_schema='ecshop' and table_type='base table' order by TABLE_ROWS desc "; $arr = $db->queryArray($sql); //var_dump($arr); foreach ($arr as $k

  • mysql中错误:1093-You can’t specify target table for update in FROM clause的解决方法

    发现问题 最近在处理一些数据库中数据的时候,写了下面的这一条sql语句: UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) + N ) 上面的sql是想将某个区间的数据进行修改,但是放到测试环境下一跑,报下

  • mysql Event Scheduler: Failed to open table mysql.event

    其实这个错误按字面意思就是不能打开mysql.event表,那么就是权限问题导致的.一般mysql也无法运行. 在 本地计算机 无法启动 MySQL 服务.错误 1067: 进程意外终止. mysql 安装改变数据库路径出现的问题解决方法 在windows上安装MySQL时,刚装后一切正常,但出于数据安全考虑,想把数据库目录放在D:\mysql\data下,于是对my.ini进行修改,将datadir="C:\Documents and Settings\All Users\Applicatio

  • MySQL无法重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法

    问题分析 在关闭数据库的命令发现mysql关不了,提示Warning: World-writable config file '/etc/my.cnf' is ignored ,大概意思是权限全局可写,任何一个用户都可以写.mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件.这样mysql无法关闭. 下面看下整个过程 重启MySQL [root@ttlsa ~]# service mysqld stop Warning: World-writable config file '/e

  • 出现错误mysql Table 'performance_schema...解决办法

    测试环境搭了一个mariadb 5.7,使用jdbc驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> 在hibernate工程中正常. 临时搭建了一个jdbc的简单工程,发现连接数据库报错: Table 'pe

  • mysql “ Every derived table must have its own alias”出现错误解决办法

    mysql  Every derived table must have its own alias错误解决办法 Every derived table must have its own alias 这句话的意思是说每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名 把MySQL语句改成:select count(*) from (select * from

  • 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

  • MySQL中dd::columns表结构转table过程及应用详解

    目录 一.MySQL的dd表介绍 二.代码跟踪 三.知识应用 四.总结 一.MySQL的dd表介绍 MySQL的dd表是用来存放表结构和各种建表信息的,客户端建的表都存在mysql.table和mysql.columns表里,还有一个表mysql.column_type_elements比较特殊,用来存放SET和ENUM类型的字段集合值信息.看一下下面这张表的mysql.columns表和mysql.column_type_elements信息.为了缩短显示长度,这里只展示几个重要的值. #建表

  • MySQL 5.7解压版安装、卸载及乱码问题的图文解决方法

    1. 解压版的安装 (1). 下载压缩包并解压到一个磁盘位置 压缩包下载链接:https://dev.mysql.com/downloads/mysql/ 压缩包内容: (2). 写配置文件 复制my-default.ini重命名为my.ini,然后修改或添加配置信息: [mysqld] #mysql解压目录 basedir = <解压目录> #data文件夹位置,用来存放库和表 datadir = <data文件夹目录> #mysql默认端口号 port = 3306 #数据库服

  • MySQL启动1053错误解决方法

    操作系统:windows7 mysql版本:5.5.22 www.jb51.net 在使用命令mysqld --install servicename --defaults-file='file_name'创建mysql服务时,系统 已提示创建服务成功,但是net start命令提示启动失败,并在services.msc中提示1053错误 解决办法: 在网上有人说是服务的"登录"选项卡里要设置成administrator: 也有人说是需要先把服务删除,在重新创建(可以先考虑这两方面):

  • Mysql 1864 主从错误解决方法

    从字面意思看了一下是因为slave_pending_jobs_size_max默认值为16777216(16MB),但是slave接收到的slave_pending_jobs_size_max为17085453(17M): 解决方案 从库执行如下SQL mysql>stop slave; mysql>set global slave_pending_jobs_size_max=20000000; mysql> start slave; #在多线程复制时,在队列中Pending的事件所占用

  • Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步的Last_IO_Errno:1236错误是什么原因呢,我们要如何来解决这个问题呢?下面和小编一起来看看关于此问题的记录与解决办法. <script>ec(2);</script> 从服务器错误代码: Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replicat

  • win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法

    本文实例分析了win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: public void ResMsg() {     while (isRecMsg)     {  //准备一个数组 准备接收 服务端发来的数据  byte[] msgRec = new byte[1024 * 1024 * 2];  //接收服务端发来的数据,此方法也会阻断当前线程,并返回接收的数据的长度  int recLe

  • php中laravel调度执行错误解决方法

    我们说laravel框架的功能性比较明确,作为全栈框架在代码的运行上是比较简洁的.在对laravel框架安装完成后,我们可以就其中的一些操作为大家展现.本篇要带来的是在laravel中的调度,分为两种不同目录的情况讨论,同时把可能在调度中会出现的错误情况,单独为大家呈现并解决. 1.不在laravel根目录(命令行操作前的地址) php /www/wwwroot/laravel6/artisan schedule:run /www/wwwroot/laravel/artisan 解释 /www/

  • MySQL的主从复制步骤详解及常见错误解决方法

    mysql主从复制(replication同步)现在企业用的比较多,也很成熟.它有以下优点: 1.降低主服务器压力,可在从库上执行查询工作. 2.在从库上进行备份,避免影响主服务器服务. 3.当主库出现问题时,可以切换到从库上. 不过,用它做备份时就会也有弊端,如果主库有误操作的话,从库也会收到命令. 下面直接进入操作.这里使用的是debian5操作系统,mysql5.0,默认引擎innodb 10.1.1.45 主库 10.1.1.43 从库 1.设置主库 1)修改主库my.cnf,这里主要是

随机推荐