首页 > 程序 > You can't specify target table 'yioon_members' for update in FROM clause

作者:ghostry 发布时间:2013-09-03 浏览: 4560

转载注明出处: https://blog.ghostry.cn/program/you-cant-specify-target-table-yioon_members-for-update-in-from-clause.html

今天处理数据。去除重复。
刚开始我想新建一个表,然后查询老表插入新表,插入前做判断。后来想还得建立一个表和一个php文件。我是一个懒人,于是我另寻他法了。

delete from people
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

这句是网上找的,意思是根据peopleid删除重复项保留rowid最小的那条记录。
看起来很好。可惜放到mysql里边就提示了标题的错误。意思是不能同时update和select同一个表。
搞了半天,最后改成这样

delete from yioon_members
  where wid  in (select  wid  from (select  tmp.*  from yioon_members tmp) tmp  group  by  wid   having count(wid) > 1) 
and id not in (select min(id) id from  (select  tmp.*  from yioon_members tmp) tmp  group by wid  having count(wid) > 1)

其中重要的是查询的from后边。我又查了一次表作为临时表这样就不同时查询和修改表了。效率相当低。不过幸好只需做一次。

标签: mysql

上一篇: 天津之行
下一篇: php在线执行

添加新评论 »

*
*

欢迎评论!歡迎評論!Comments welcome!komentoj bonvenaj!댓글 오신 것을 환영합니다!
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: :cold: :cryy: :cute: :shy: :sleep: :struggle: :tea: :yahou: