当前位置: 首页 > news >正文

MySQL 报错 You can‘t specify target table for update in FROM clause解决办法

You can’t specify target table for update in FROM clause

其含义是:不能在同一表中查询的数据作为同一表的更新数

单独执行复合查询是正常的,如下:

但是当执行子查询删除命令时,报如下错误

DELETE FROM abpusers WHERE Id IN 
(
SELECT u.Id FROM `abpusers` u
left join abpuserroles ur on u.Id=ur.UserId
LEFT JOIN abproles r on ur.RoleId=r.Id 
LEFT join base_companyinfo c on u.Id=c.UserId 
WHERE r.`Name` in('supplier','demand')
and c.Id is NULL
)

且在其他类型的数据库中并不会出现,解决方法也简单,就是再封装一次查询,让数据库认为你不是查同一表的数据作为同一表的更新数据,如下:

DELETE FROM abpusers WHERE Id IN 
(
select Id from (
SELECT u.Id FROM `abpusers` u
left join abpuserroles ur on u.Id=ur.UserId
LEFT JOIN abproles r on ur.RoleId=r.Id 
LEFT join base_companyinfo c on u.Id=c.UserId 
WHERE r.`Name` in('supplier','demand')
and c.Id is NULL
) a
)

 结果如下,已成功影响21行

http://www.lryc.cn/news/259389.html

相关文章:

  • Linux中使用podman管理容器
  • 飞天使-linux操作的一些技巧与知识点3-http的工作原理
  • 微搭低代码实现登录注册功能
  • 使用Cobalt Srike制作钓鱼文件
  • 任意文件读取漏洞
  • 一个文件下png,jpg,jpeg,bmp,xml,json,txt文件名称排序命名
  • phpstudy小皮(PHP集成环境)下载及使用
  • [BUG记录]UART占用CPUload过高问题
  • Flutter常用命令
  • 【C++】POCO学习总结(十四):引用计数、共享指针、缓冲区管理
  • Python之禅
  • RocketMQ源码 Broker-SubscriptionGroupManager 订阅组管理组件源码分析
  • go-zero开发入门-API网关鉴权开发示例
  • [LLM]nanoGPT---训练一个写唐诗的GPT
  • docker compose部署wordpress
  • 【docker四】使用Docker-compose一键部署Wordpress平台
  • HTML程序大全(1):简易计算器
  • esp32服务器与android客户端的tcp通讯
  • 自定义Mybatis LanguageDriver性能优化
  • DevEco Studio 鸿蒙(HarmonyOS)项目结构
  • Springboot整合篇Druid
  • uniapp 微信小程序 封装axios 包含请求拦截、响应拦截、无感刷新令牌功能
  • C语言精选——选择题Day41
  • Tomcat头上有个叉叉
  • Linux shell编程学习笔记35:seq
  • Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值
  • 涉密网络的IP查询防护策略
  • 基础算法(1):排序(1):选择排序
  • GeoTrust OV证书
  • 第一个“hello Android”程序