mysql 中 不能更新在from 从句中出现的表。
使用 Join 来解决问题
如何更新使用过滤条件中包括自身的表?
情景:
把同时存在于取经四人组和悟空兄弟表中的记录的人在取经四人组表中的 over 字段更新为“齐天大圣”。
Update无法更新过来条件的数值
使用Join更新表
示例:执行Update 和 Join语句
查看更新结果
MySQL
如何更新使用过滤条件中包含自身的表?
1)使用join来解决问题,变通实现
mysql不支持更新使用过滤条件中包含自身的表
join 技巧
获取两张表中的都存在的数据更新这一条记录
update user1 set over='齐天大圣' where user1.user_name in (select b.user_name from user1 a join user2 b on a.user_name=b.user_name);
error:1093
技巧:
update user1 a join (select b.user_name from user1 a join user2 b on a.user_name=b.user_name ) b on a.user_name=b.user_name set a.ver='齐天大圣';
更新自身表操作
MySQL不支持带FROM的join更新表:
使用join更新表:
连表更新: update tbuser1 a join tbuser2 b on a.username=b.username set a.tbcount=b.tbcount;
如何在关联查询中更新数据?在join语句中更新数据?
update table1 a join table2 b on a.id=b.id set a.name='xxxxxx';
table2不仅仅可以是一个表,还可以是一个子查询得到的结果。
同样删除语句也可以使用join语句来删除。
delete a.* from table1 a inner join table2 b on a.id=b.id;
另外在from语句中使用update也是可以,只要在in的子查询中,再包裹一层查询就可以。
update user1 set user1.over = '齐天大圣' where user1.name in (select name
from (select a.name from user1 a inner join user2 b on a.name = b.name) as t);
mysql不支持直接更新过滤条件包含自身的表(sqlservr /Oracle支持),这时候需要把过滤条件前置
更新表操作,更新的表不能出现在from重句中,拿出来放到链接join中
更新表自身
1、更新字段的内容
update user1
set over='齐天大圣'
where user1.username in(
select a.username from user1 a inner join user2 b on a.username=b.username);
更新表操作,更新的表不能出现在from重句中,拿出来放到链接join中
j上课笔记。。。
根据表关联修改字段
update table1 set column='{test}' where table1.column in (select b,column from table1 a join table2 b on a.column=b.column)
根据上述查询,数据库会报错,优化
update table1 a join (select b,column from table1 a inner join table2 b on a.column=b.column) b on a.column=b.column set a.column='{test}'
更新表自身
1、更新字段的内容
update user1
set over='齐天大圣'
where user1.username in(
select a.username from user1 a inner join user2 b on a.username=b.username);
报错:要更新的表不能出现在from从句中
2、解决方法
update user1 a join (select a.username from user1 a inner join user2 b on a.username=b.username) c on a.username = c.username set a.over ='齐天大圣'
解决mysql join无法更新表的问题
update username1 set over='齐天大圣' where user1.username in( select b,username from user1 a inner jonin user2 b on a。userName=b.userName)
解决方法。
mySql不能更新过滤条件中包含自身的表
mysql中如何更新使用过滤条件中包括自身的表?
update user1 set over='齐天大圣' where user1.user_name in (
select b.user_name from user1 a inner join user2 b on a.user_name=b.user_name);
报错:ERROR 1093(HY000):You cannot specify target table 'usre1' for update in from .......
可通过截图方式联合更新。
联合查询 更新表
@MySQL---用JOIN更新表
1.问题---ERROR 1093错误 不能更新from语句中出现的表字段
update user1 set over=‘齐天大圣’ where user1.user_name in ( select b.user_name from user1 a join user2 b on a.user_name = b.user_name);
2.解决办法---使用JOIN进行联合更新
UPDATE user1 a INNER JOIN user2 b ON a.user_name = b.user_name SET a.over='齐天大圣'; #推荐
UPDATE user1 a JOIN (SELECT b.user_name FROM user1 a JOIN user2 b ON a.user_name = b.user_name) b ON a.user_name = b.user_name SET a.over=‘齐天大圣’;
左连接,右连接,条件加 where b.clo is null 可以代替in,优化查询
更新使用过滤条件中包括自身的表
UPDATE user1 SET over='齐天大圣' WHERE user1.`user_name` IN (SELECT b.`user_name` FROM user1 a INNER JOIN user2 b ON a.`user_name` = b.`user_name`) --该语句不能在MySQL 中执行,但是是正确的,
在MYSQL中更新的表不能出现在FROM后
MYSQL:替换UPDATE user1 a join(select b.`user_name` from user1 a join user2 b on a.user_name=b.user_name) b on a.user_name = b.user_name set a.over = '齐天大圣',建立一个虚拟表与user1内联接
技巧一(正确写法)