【发布时间】:2011-05-27 22:53:01
【问题描述】:
错误 1093 指出,如果您的子查询查询您要从中删除的表,则您无法使用子查询进行 UPDATE 或 DELETE。
所以你不能这样做
delete from table1 where id in (select something from table1 where condition) ;
好的,解决该限制的最佳方法是什么,(假设您确实需要子查询来执行删除并且不能完全消除自引用子查询?)
编辑:
以下是感兴趣的人的查询:
mysql> desc 邻接; +---------+---------+------+------+---------+------ -+ |领域 |类型 |空 |钥匙 |默认 |额外 | +---------+---------+------+------+---------+------ -+ |家长 |整数(11) |否 |优先级 |空 | | |孩子|整数(11) |否 |优先级 |空 | | |路径长度 |整数(11) |否 | |空 | | +---------+---------+------+------+---------+------ -+ -- 查询将 ——告诉我所有的孩子 ——别再想我的老父母了 ——仍然是他们的父母 从邻接中删除 父母在哪里 ( -- 我所有的父母,祖父母 选择父母 从邻接 孩子=@我 和父母!=@我 ) ——只涉及我的关系 -- 关心我孩子的祖父母 和孩子在 ( ——带上我所有的孩子 选择孩子 从邻接 哪里父母=@我 ) ;所以到目前为止我尝试的是创建一个名为 adjsToDelete 的临时表
create temporary table adjsToRemove( parent int, child int ) ;
insert into adjsToRemove...
所以现在我有一个要删除的关系集合,其中父/子对各自唯一标识要删除的行。但是我现在如何从邻接表中删除每个 pair?
看来我需要为adjacencies 中的每个条目添加一个唯一的auto_incremented 键,对吗?
【问题讨论】:
-
你尝试过使用 nolock 吗?
-
你想做什么?查询是什么?
-
a1ex07 的答案(使用连接删除)在大型表上的性能比使用双嵌套子查询的变通办法更好。
标签: mysql sql sql-update sql-delete mysql-error-1093