我在同一服务器上托管了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分钟后手动取消查询。
-
有人可以建议最有效/最快的方法来实现这一目标吗?
答案 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;