主页 > 开源代码  > 

MySQL报错Youcan‘tspecifytargettableforupdateinFROMclause解决

MySQL报错Youcan‘tspecifytargettableforupdateinFROMclause解决

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行

标签:

MySQL报错Youcan‘tspecifytargettableforupdateinFROMclause解决由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MySQL报错Youcan‘tspecifytargettableforupdateinFROMclause解决