如何根据另一个表中的其他行从mysql中删除多行
我有一个名为phones的表包含所有成员的电话号码每个成员都有唯一的id,还有一个名为posts的表posts表有许多行每个post都有其成员id和另一个单元格 我需要从posts表收集所有成员ID,具体取决于branchs单元格,并从phones表中删除从posts表收集的成员ID 我尝试了这个,但它给我错误消息,mysql服务器失去了连接如何根据另一个表中的其他行从mysql中删除多行,mysql,Mysql,我有一个名为phones的表包含所有成员的电话号码每个成员都有唯一的id,还有一个名为posts的表posts表有许多行每个post都有其成员id和另一个单元格 我需要从posts表收集所有成员ID,具体取决于branchs单元格,并从phones表中删除从posts表收集的成员ID 我尝试了这个,但它给我错误消息,mysql服务器失去了连接 delete from `phones` where `mid` in(select `uid` from `posts` where `branches
delete from `phones` where `mid` in(select `uid` from `posts` where `branches` = 'contact');
注意:我在本地服务器上使用mysql workbench
已更新
在我设置了下面的首选项之后,此查询也起作用
转到编辑->首选项->SQL编辑器并增加参数:DBMS连接读取超时(以秒为单位)。例如:86400
关闭并重新打开MySQL工作台。终止以前可能正在运行的查询,然后再次运行该查询
感谢@scaisEdge您的查询似乎是正确的。。无论如何,您可以尝试使用内部联接
delete `phones`.*
from `phones`
inner join `posts` on `phones`.`mid` = `posts`.`uid`
and `posts`.`branches` = 'contact'
内部联接不使用IN子句,因此可以绕过相关限制
如果错误仍然存在,请尝试增加读取超时
转到Edit->Preferences->SQL Editor,然后输入参数:DBMS连接读取超时(以秒为单位)。例如:86400
关闭并重新打开MySQL工作台。终止以前可能正在运行的查询,然后再次运行该查询。查询正确,但不确定连接丢失的原因。这些是大桌子吗?如果是这样的话,则select查询可能会花费太长时间,因为在
分支上缺少索引
?表太大,分支列没有索引index@mohamad,你在兜圈子。如果表很大并且在分支上没有索引
,整个表都将被扫描,这取决于MySQL可用的硬件和资源,可能需要比DB连接超时更长的时间。如果你有索引,你的查询是正确的。不确定为什么这会起作用,而不是问题中发布的那一个?@allinking如果in子句中的元素数很高,你可以达到限制。。所以内部连接避免这个条件OK。我怀疑没有设置适当的索引。因此,即使是联接也不能保证有效。糟糕的索引只能通过在表上放置适当的索引来修复:-)可能是。。但糟糕的指数会对业绩产生影响。。最大包装尺寸。对所涉及数据量的影响。@scaisEdge错误代码:2013。查询期间与MySQL服务器的连接中断