1.应用情景

把表game字段kg的值中iw字符串去掉。

2.错误写法

update game set kg=replace(kg,'iw','') where kg in (select kg from game where kg like '%iw%');

会报错:1093 - You can't specify target table。update语句中包含的子查询的表和update的表为同一张表时,会报错。

3.解决方法

给查询加别名,用中间表来实现不是对同一表作操作。

4.正解

update game set kg=replace(kg,'iw','') where kg in (select * from(select kg from game where kg like '%iw%') tempTable);

5.扩展

将tail表中number为8的qty字段,修改成7,要通过临时表实现之。

UPDATE tail SET qty="7" WHERE id= (SELECT * from (SELECT id FROM tail WHERE number="8") tempTable)