如何从数据库 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;
我有 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;