Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据另一个表中的其他行从mysql中删除多行_Mysql - Fatal编程技术网

如何根据另一个表中的其他行从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

我有一个名为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` = '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服务器的连接中断