首页 / 知识
关于子查询:MySQL错误1093-无法在FROM子句中指定目标表进行更新
2023-04-14 07:24:00

MySQL Error 1093 - Can't specify target table for update in FROM clause
我的数据库中的表
我试图删除它们执行:
但是我得到了下一个错误:
我该如何克服? 更新:此答案涵盖了常规错误分类。有关如何最好地处理OP的确切查询的更具体的答案,请参阅此问题的其他答案
在MySQL中,您不能修改在SELECT部分??中使用的同一表。 也许您可以将桌子自己连接起来 如果逻辑足够简单以重新构造查询,则丢失子查询并使用适当的选择条件将表连接到自身。这将导致MySQL将表视为两种不同的事物,从而允许进行破坏性的更改。
或者,尝试将子查询更深地嵌套到from子句中。
如果您绝对需要子查询,则有一种解决方法,但这是
FROM子句中的嵌套子查询创建一个隐式临时 ...但是要注意查询优化器
但是,请注意,从MySQL 5.7.6及更高版本开始,优化器可能会优化子查询,但仍然会给您错误。幸运的是,可以使用
感谢Peter V. M?rch在评论中提供的建议。 示例技术来自史瓦兹男爵(Baron Schwartz),最初出版于Nabble,释义并扩展至此处。 NexusRex提供了一个很好的解决方案,用于从同一表中删除带有join的语句。 如果您这样做:
您将得到一个错误。 但是,如果再将条件包装起来,请选择:
它会做正确的事! 说明:查询优化器对第一个查询执行派生合并优化(这会导致它失败并显示错误),但是第二个查询不符合派生合并优化的条件。因此,优化器被迫首先执行子查询。
子查询中的 做这个:
而不是:
最近,我不得不更新同一表中的记录,如下所示:
如果你做不到
因为它是同一张表,所以您可以欺骗并做到:
[更新或删除或其他] 这是我为在表中及其表中的WHERE子句中> = 1时将Priority列值更新为1而执行的操作,该列值使用同一表上的子查询来确保至少一行包含Priority = 1(因为这是执行更新时要检查的条件):
我知道这有点丑陋,但效果确实不错。 最简单的方法是在子查询中引用父查询表时使用表别名。 范例:
更改为:
您可以将所需行的ID插入到临时表中,然后删除该表中找到的所有行。 这可能就是@Cheekysoft通过两步完成操作的意思。 根据@CheekySoft链接的Mysql UPDATE语法,它说在底部。
我猜您正在从store_category中删除,同时仍在联合中从中进行选择。 尝试这个
如果某事不起作用,则通过前门进入后门:
它很快。数据越大越好。 这个查询如何希望对您有帮助
尝试将Select语句的结果保存在单独的变量中,然后将其用于删除查询。
对于OP尝试实现的特定查询,执行此操作的理想且最有效的方法是根本不使用子查询。这是OP的两个查询的
|
最新内容
相关内容
linux查询分辨率命令?
linux查询分辨率命令?,情况,设备,系统,分辨率,数据,命令,屏幕,屏幕分辨率,桌面,终端,linux下怎么通过命令改分辨率1、使用xrandr查询,带“*”的linux命令查询汉语?
linux命令查询汉语?,工作,地址,系统,信息,命令,目录,标准,状态,软件,亚洲,基本linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux下查询历史命令?
linux下查询历史命令?,地址,信息,系统,服务,数据,连续,命令,数字,名称,环境,linux下学习history命令的用法实例使用 HISTCONTROL 从命令历史中linux查询表结构命令?
linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,linux下怎么用tree命令以树形结构显示文件目录结构1、以Ubuntu为linux网络命令查询?
linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,linux查看系统网卡信息命令?方法一:ethtool eth0 采用此命令可以查看linux查询子目录命令?
linux查询子目录命令?,信息,系统,命令,名称,文件,名字,管理,软件,灵活,工具,Linux下Grep命令的详细使用方法?1、查找root目录下包含Linux的文linux查询状态的命令?
linux查询状态的命令?,系统,状态,信息,管理,数据,情况,命令,综合,电脑,工具,linux怎样使用top命令查看系统状态1、top命令用于动态的监视进程linux地址查询命令?
linux地址查询命令?,地址,网络,系统,工作,信息,设备,名称,标准,手机,管理,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux命令忽略错误?
linux命令忽略错误?,系统,地址,工作,信息,设备,命令,设计,灵活,观察,标准,linux命令问题,在使用ls命令时,能不能不让输出错误信息--pid=进程号linux查询id命令?
linux查询id命令?,信息,系统,密码,地址,用户,命令,数据,术语,用户名,用户信息,linux查看已存在的用户linux用tail查看用户是否存在/etc/group命令查询linux版本?
命令查询linux版本?,系统,信息,名称,状态,电脑,设备,工具,软件,版本,命令,在Linux命令行下查询当前所使用的shell版本与种类的方法1、一旦你知linux7查询路由命令?
linux7查询路由命令?,网络,系统,信息,工作,地址,情况,命令,通信,工具,检测,在Linux中查询路由器的情况,用什么命令1、Is -1 是 Linux中显示当