mysql:error 1093 update子查询

一、 需求

要将base_info.name以wl_开头的数据的status字段更新为2

二、执行

Update base_info

Set a.status=2

Where (select id from base_info where name like ‘%xx%’)

执行时,提示1093错误,

ERROR 1093 (HY000): You can't specify target table 't' for update in FROM clause 。

mysql不支持修改一个表的时候子查询不能是同一个表。

三、 优化

通过临时表解决这个问题

方法一:

Update base_info

Set a.status=2

Where id in ( select * from (select id from base_info where name like ‘%xx%’ ) tmp )

方法二:

update base_info b

join (select id from base_info where act_name like 'wlq_%') tmp

on tmp.id= b.id

set b.expand1=2

时间: 2024-10-05 11:58:20

mysql:error 1093 update子查询的相关文章

mysql 的delete from 和update子查询限制

最经做项目时发现的问题,好像在update时也有... 网上查到的资料如下: 1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误. mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 ); ERROR 1093 (HY000): You can't specify target table 'tab1′ for update in FROM cl

MySQL学习15:子查询(一)

一数据准备 (1)创建数据库 CREATE DATABASE IF NOT EXISTS t2 CHARACTER SET gbk; (2)创建数据表 CREATE TABLE IF NOT EXISTS tdb_goods( goods_id    SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, goods_name  VARCHAR(150) NOT NULL, goods_cate  VARCHAR(40)  NOT NULL, brand_na

MySQL学习15:子查询(二)

二子查询 3由[NOT] IN/EXISTS引发的子查询 使用[NOT] IN引发的子查询的语法结构:operand comparsion_operator [NOT] IN (subquery).其中,=ANY运算 符与IN等价:!=ALL或<>ALL运算符与NOT IN等价. 例子: 1)查询所有商品中价格等于超级本价格(任意一个)的商品 SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price IN (

mysql优化---in型子查询,exists子查询,from 型子查询

in型子查询引出的陷阱:(扫更少的行,不要临时表,不要文件排序就快) 题: 在ecshop商城表中,查询6号栏目的商品, (注,6号是一个大栏目) 最直观的: mysql> select goods_id,cat_id,goods_name from goods where cat_id in (select cat_id from category where parent_id=6); 误区: 给我们的感觉是, 先查到内层的6号栏目的子栏目,如7,8,9,11 然后外层, cat_id in

为什么MySQL不推荐使用子查询和join

前言: 1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据. 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程. 3.如果是JOIN的话,它是走嵌套查询的.小表驱动大表,且通过索引字段进行关联.如果表记录比较少的话,还是OK的.大的话业务逻辑中可

MySQL中常用操作--子查询

子查询就是SELECT 查询是另一个SELECT的附属,  此时, MySQL从最内层的查询开始, 再向外向上查询, 接着最外层的父查询被执行, 它的结果也指定给父查询. 带IN的子查询:只有子查询返回的结果列中包含一个值时, 比较运算符才适用. 假如一个子查询的返回结果集是值的列表, 这时比较运算符就必须用关键字IN代替IN运算符可以检测结果集中是否存在某个特定的值, 如果检测成功就执行外部的查询. mysql> select * from stu -> ; +----+----------

mysql表连接,子查询以及if判断

创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2) DEFAULT NULL, deptno int(2) DEFAULT NULL, age int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE dept ( deptno int(2) DEFAULT NUL

MySQL比较运算符的子查询

使用比较运算符的子查询 =.>.<.>=.<=.<>.!=.<=> 语法结构 operand comparison_operator subquery 需要使用ANY.SOME.ALL查询子句. operand comparison_operator  ANY| SOME | ALL  (subquery);

mysql select后面的子查询

select后面的子查询使用,只能是标量查询 #案例:查询每个部门的员工个数 SELECT d.*,( SELECT COUNT(*) FROM employees WHERE employees.`department_id`=d.department_id ) FROM departments d; #案例:查询员工号=102的部门名 SELECT department_name FROM employees e INNER JOIN departments d ON e.`departme