MySQL数据库update更新子查询

比如:

UPDATE test.tb_vobile a 
set a.name = ‘111 ‘
WHERE
a.id = (select max(id) id from test.tb_vobile)

报错:

[SQL]UPDATE test.tb_vobile a 
set a.name = ‘111 ‘
WHERE
a.id = (select max(id) id from test.tb_vobile)

[Err] 1093 - You can‘t specify target table ‘a‘ for update in FROM clause

以下可通过:

UPDATE test.tb_vobile a 
join 
(select max(id) id from test.tb_vobile) b 
on a.id = b.id 
set a.name = ‘123 ‘;

UPDATE test.tb_vobile a ,(select max(id) id from test.tb_vobile) b 
set a.name = ‘321 ‘
WHERE
a.id = b.id ;

说明:

1、update 时,更新的表不能在set和where中用于子查询;
2、update 时,可以对多个表进行更新(sqlserver不行);
如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;  
3、update 后面可以做任意的查询,这个作用等同于from;

时间: 2024-12-20 23:50:14

MySQL数据库update更新子查询的相关文章

mysql update from 子查询

mssql 子查询更新 update log set uin= b.uinfrom log a,logs bwhere a.accountuin = b.accountuin mysql 不支持 update 子查询更新 找了半天资料 终于搞定了... update `log` a inner join `logs` b on a.`accountuin` = b.`accountuin`set a.`uin` = b.`uin` where a.`accountuin` = b.`accoun

Java对MySQL数据库进行连接、查询和修改(转)

Java对MySQL数据库进行连接.查询和修改 0. 一般过程: (1) 调用Class.forName()方法加载驱动程序. (2) 调用DriverManager对象的getConnection()方法,获得一个Connection对象. (3) 创建一个Statement对象,准备一个SQL语句,这个SQL语句可以是Statement对象(立即执行的的语句).PreparedStatement语句(预编译的语句)或CallableStatement对象(存储过程调用的语句). (4) 调用

mysql update更新带子查询的实现方式

现在要做一下数据移植,需要更新相关的数据,需要在mysql中更新时不能将更新的表作为查询的表. 总结一下: 一:单表更新时 例如: update customer set category = 1 WHERE  deleteflag = 0 and name = '22'; 注意不要子查询,mysql是不允许的. 二:带子查询的复杂更新 如: update tb a,(select  time,namefrom tt )b set time4=b.colwhere a.name=b.name a

python中的MySQL数据库操作 连接 插入 查询 更新 操作

MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看. 在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系.它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的信息,比如

mysql数据库的多表查询,子查询,联合查询

/*多表查询*//*交叉连接*(表1条数*表2条数)*/SELECT * FROM emp JOIN dept;/*内连接(在交叉连接基础上加条件)*/SELECT * FROM emp JOIN dept ON deptid=id;SELECT * FROM emp JOIN dept ON emp.deptid=dept.id;/*左外连接*(以左表为主表)*/:SELECT * FROM product_type LEFT JOIN product ON product.`protype_

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数据库之单双表查询

单表查询 先创建表 #创建表 create table employee( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, post varchar(50), pos

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不推荐使用子查询和join

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