当前位置: 首页 > 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行

相关文章:

  • Bypass open_basedir
  • @ApiImplicitParam注解使用说明
  • css实现姓名两端对齐
  • 基于ssm社区管理与服务的设计与实现论文
  • ChatGPT的常识
  • 微搭低代码实现登录注册功能
  • 德语 Alt 代码表
  • 国基北盛 openstack 云平台搭建保姆级步骤
  • Java----冒泡排序、选择排序、插入排序、快速排序、堆排序
  • LangChain 25: SQL Agent通过自然语言查询数据库sqlite
  • 004 Windows NTFS文件夹权限
  • 云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)
  • PHP基础(4)
  • 系统架构设计师教程(二)计算机系统基础知识
  • 《微信小程序开发从入门到实战》学习四十七
  • 2023 巅峰之作 | AIGC、AGI、GhatGPT、人工智能大语言模型的崛起与挑战
  • 消息队列使用指南
  • Mac电脑投屏AirServer 2024怎么下载安装激活许可期限
  • docker 资源控制
  • Halcon一维码识别
  • 报告:4月份新增发行的1763亿元专项债中,投向房地产相关领域约717亿元
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益
  • 公安部部署“昆仑2025”专项工作,严打环食药等领域突出犯罪
  • 圆桌丨权威专家解读中俄关系:在新形势下共同应对挑战、共创发展机遇
  • 秦洪看盘|受阻回落,蓄积新做多能量