博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql -- You can't specify target table 'address' for update in FROM clause
阅读量:6188 次
发布时间:2019-06-21

本文共 643 字,大约阅读时间需要 2 分钟。

做地址管理时,需要先根据要设为默认的地址的用户将用户的其他地址都设置为非默认

需要select出用户id然后update

原语句

update address set isdeafult = 0 where user_id = (select user_id from address where id = ?)

报错 -- You can't specify target table 'address' for update in FROM clause

 

大意是不能先select出同一表中的某些值,再update这个表(在同一语句中)

修改后的语句如下

UPDATE address a INNER JOIN (SELECT user_id FROM address WHERE id = #{id}) c SET a.isdeafult = 0 WHERE a.user_id = c.user_id

解析

select * from address a INNER JOIN

(SELECT user_id FROM address WHERE id = 1) c WHERE a.user_id = c.user_id

的内容完全等于 select * from address ,本质上就是用inner join做了个中间表查询

 

注 : 只有在mysql中才有这个错误

转载于:https://www.cnblogs.com/huhuixin/p/7054800.html

你可能感兴趣的文章
2015年8月30日课程作业(练习)
查看>>
callable() 函数
查看>>
有4个线程A、B、C、D,分别打印1、2、3、4,请同时启动他们,但是要求按照1234的顺序输出结果...
查看>>
liunx 中普通用户关机的方法
查看>>
LNMP架构应用实战——Nginx配置虚拟主机
查看>>
linux和unix常用快捷键
查看>>
IT职场人生系列之九:消费观(攒钱,继续教育,买房)
查看>>
第八部分 防火墙规则
查看>>
dedecms后台管理搜索到文章正文内容的方法
查看>>
CentOS6服务管理之DNS-本地DNS服务器的搭建
查看>>
win7英文版系统打开txt文本乱码
查看>>
HTML JS 弹层后底部页面禁止滚动处理
查看>>
python session验证用户
查看>>
我的友情链接
查看>>
写点和硬件有关的
查看>>
硬盘/u盘能识别不能打开问题分析
查看>>
Windows服务的手动添加和删除方法
查看>>
AndroidAnnnotations注入框架的工作原理(二)
查看>>
用fail2ban阻止密码尝试***
查看>>
/etc/resolv.conf文件被复写的解决
查看>>