如何从数据库 X 中的 table 中删除行,其中 ID 存在于数据库 Y 中

How to delete rows from a table in database X, where the ID exists in Database Y

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

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

中有相应的行

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

我可以执行 SELECT returns 预期的所有操作 - 这实际上是我要删除的数据集。

一个例子 select 是:

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

这有效,它 returns 在 138 毫秒内完成 5 行。

--

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

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

查询似乎挂起 - 没有返回任何错误,所以我必须在大约 3 分钟后手动取消查询。

--

谁能建议最efficient/fastest实现此目标的方法?

像下面这样尝试它会起作用

DELETE FROM table_a WHERE `code` NOT IN (      

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

     );

尝试以下查询:

 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;