博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql修改删除You can't specify target table for update in FROM clause的问题
阅读量:6671 次
发布时间:2019-06-25

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

表中出现重复数据,需要删除重复数据,只保留一条

DELETE FROM    crm_participant WHERE    id IN ( SELECT    c.id cid FROM    crm_participant c WHERE    c.parentPhone IN ( SELECT a.parentPhone FROM crm_participant a GROUP BY a.parentPhone HAVING count( a.parentPhone ) > 1 )     AND c.id NOT IN ( SELECT min( b.id ) FROM crm_participant b GROUP BY b.parentPhone HAVING count( b.parentPhone ) > 1 ) ORDER BY    c.parentPhone     ) 错误信息:

> 1093 - You can't specify target table 'crm_participant' for update in FROM clause

> 时间: 0.005s

  

问题分细:       mysql不允许对同一个表中查出来的数据作为条件,在执行跟新操作。 在一条 sql 语句中不能先查出来部分内容,再同时又对当前表作修改。

 

解决办法:这个是正确的sql,其实就是对上边的红色部分的查询sql进行了一层包裹。让查询出来的信息被一个  select 包裹一下,然后作为条件就可以了 DELETE FROM    crm_participant WHERE    id IN (SELECT    v.cid FROM    (SELECT    c.id cid FROM    crm_participant c WHERE    c.parentPhone IN ( SELECT a.parentPhone FROM crm_participant a GROUP BY a.parentPhone HAVING count( a.parentPhone ) > 1 )     AND c.id NOT IN ( SELECT min( b.id ) FROM crm_participant b GROUP BY b.parentPhone HAVING count( b.parentPhone ) > 1 ) ORDER BY    c.parentPhone     ) v      )

 

转载于:https://www.cnblogs.com/renjianjun/p/10412703.html

你可能感兴趣的文章
MongoDB常用命令大全
查看>>
Python程序的执行过程
查看>>
Proxmox-VE搭配Ceph存储组建高可用虚拟化平台
查看>>
前端基础---JavaScript
查看>>
Linux关于大于2T的磁盘分区格式化
查看>>
lamp系列-MySQL主从复制原理视频(老男孩出品)
查看>>
堆和栈的区别
查看>>
Android 编辑框(EditText)属性学习
查看>>
【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
查看>>
部分3G网卡连接Cisco ***后不能访问内网资源
查看>>
JavaScript 核心知识点
查看>>
Beta阶段——Scrum 冲刺博客第二天
查看>>
【转】jqGrid学习之介绍
查看>>
linux 后台运行 程序 命令
查看>>
HuaWei设置镜像和观察端口
查看>>
Linux命令之tr
查看>>
JSTL XML 学习备忘
查看>>
Scala 深入浅出实战经典 第80讲:List的泛型分析以及::类和Nil对象
查看>>
10.IPSec×××高可用性技术-链路备份
查看>>
我的友情链接
查看>>