如何从数据库X中存在ID的数据库X中的表中删除行

时间:2018-09-12 17:28:01

标签: mysql sql-delete

我在同一服务器上托管了2个mysql 5.7数据库(我们正在从一种结构迁移到另一种结构)

我想从database1.table_x中删除所有行,其中database2.table_y中有对应的行

包含要匹配的数据的列称为code

我能够执行SELECT并返回所有期望的内容-这实际上是我要删除的数据集。

一个示例选择为:

SELECT * 
FROM `database1`.`table_x` 
WHERE `code` NOT IN (SELECT `code` 
                     FROM `database2`.`table_y`);

这有效,它在138ms内返回5行。

-

但是,如果我将SELECT更改为DELETE,例如

DELETE
FROM `database1`.`table_x` 
WHERE `code` NOT IN (SELECT `code` 
                     FROM `database2`.`table_y`);

查询似乎挂起-没有返回错误,因此我必须在3分钟后手动取消查询。

-

有人可以建议最有效/最快的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

尝试如下操作即可

DELETE FROM table_a WHERE `code` NOT IN (      

        select * from 
         (
          SELECT `code` FROM `second_database`.`table_b`        
         ) as t

     );

答案 1 :(得分:0)

尝试以下查询:

 DELETE a 
 FROM first_database.table_a AS a 
 LEFT JOIN second_database.table_b AS b ON b.code = a.code 
 WHERE b.code IS NULL;