您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
mysql操作某表的条件需要in到某表自己的一个bug的解决(for update in FROM clause)
发布时间:2018-06-05 21:59:36编辑:雪饮阅读()
像如下这条sql是为了修改用户表中电话号码为15829270113的性别为女,而该sql本来是不需要用in的,我们的一个同事杜敏捷不知道怎么就写成这样了,虽然也可以"实现",但是性能问题很大。
update s_user set sex='女' where id in(select id from s_user where phone_num=15829270113);
其实这里的“实现”只是从这条sql的字面意思上感觉可以实现。而mysql偏偏就有这样一个bug,如果当前查询的表的条件也是in当前查询表那么就会报错"xxxxxxfor update in FROM clause"
问题解决也不难,就是在in的基础上加上一个外壳,将原本的in中的sql别名为一个新表,然后外壳在in这个新表,如:
update s_user set sex='女' where id in (select id from(select id from s_user where phone_num=15829270113) a);
这样就解决了,该bug在oracle数据库中是不存在的。
关键字词:mysql,in,bug,for update in FROM clause