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是想将某个区间的数据进行修改,但是放到测试环境下一跑,报下面的错误:

[Err] 1093 – You can't specify target table ‘f_student' for update in FROM clause

意思很显而易见了,说不能对进行查询操作的表进行update操作,也就说我们的where条件中进行了子查询,并且子查询也是针对需要进行update操作的表的,mysql不支持这种查询修改的方式。

解决方法

上网查了一下,针对这种问题可以通过”绕”的方式进行实现,下面看sql语句。

UPDATE f_student SET school_id = 0 WHERE
                     id >
                     (
                     SELECT id FROM (
                         SELECT id FROM f_student WHERE school_id = M LIMIT 1
                       ) AS temp
                     )
                     AND id <
                    (
                     (
                      SELECT id FROM (
                              SELECT id FROM f_student WHERE school_id = M LIMIT 1
                             ) AS temp_1
                     ) + N
                    )

ok,完全没有问题。上面的sql相比于之前的sql只是在取id的时候绕了一下,通过一个子查询的方式获取到id,而不是直接进行获取。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • 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 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 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一个库下面的所有的表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无法重启报错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中错误: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中错误使用SQL语句Groupby被兼容的情况

    首先创建数据库hncu,建立stud表格. 添加数据: create table stud( sno varchar(30) not null primary key, sname varchar(30) not null, age int, saddress varchar(30) ); INSERT INTO stud VALUES('1001','Tom',22,'湖南益阳'); INSERT INTO stud VALUES('1002','Jack',23,'益阳'); INSERT

  • IE6/7/8/9中Table/Select的innerHTML不能赋值的解决方法

    IE6/7/8/9中Table/Select的innerHTML赋值会报错,如下 IE6/7/8/9中TABLE的innerHTML不能赋值 try{ var table = document.createElement('table'); table.innerHTML = ' Test table innerHTML ' document.body.appendChild(table); }catch(e){ alert(e); } [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • MySQL优化表时提示 Table is already up to date的解决方法

    在后台使用phpMyAdmin对数据库进行优化时,显示成"Table is already up to date". 很多人可能会对这次感到担心,因为默认优化表后提示是"status OK",如下: Table Op Msg_type Msg_text commentmeta optimize status OK comments optimize status OK term_taxonomy optimize status OK usermeta optimiz

  • Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

  • MySQL中使用MD5加密的实现

    目录 什么是MD5? MD5初体验 MySQL中其他方式 什么是MD5? MD5信息摘要算法(英语:MD5 Message-Digest Agorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致.MD5由美国密码学家罗纳德·李维斯特(Ronald LinnRivest))设计,于1992年公开,用以取代MD4算法.这套算法的程序在RFC1321标准中被加以规范.1996年后该算法被证实存在弱点,可以被加以破解,

  • Mysql删除重复数据保留最小的id 的解决方法

    在网上查找删除重复数据保留id最小的数据,方法如下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING count(peopleName) > 1 ) AND peopleId NOT IN ( SELECT min(peopleId) FROM people GROUP BY peopleName HAVING count(peopleName) >

  • MYSQL设置触发器权限问题的解决方法

    本文实例讲述了MYSQL设置触发器权限的方法,针对权限错误的情况非常实用.具体分析如下: mysql导入数据提示没有SUPER Privilege权限处理,如下所示: ERROR 1419 (HY000): You do not have the SUPER Privilege and Binary Logging is Enabled 导入function . trigger 到 MySQL database,报错: You do not have the SUPER privilege an

  • JavaScript中解决多浏览器兼容性23个问题的快速解决方法

    一.document.formName.item("itemName") 问题 问题说明:IE下,可以使用 document.formName.item("itemName") 或 document.formName.elements ["elementName"]:Firefox 下,只能使用document.formName.elements["elementName"]. 解决方法:统一使用document.formNa

随机推荐