У меня есть 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`);
Это работает и возвращает 5 строк в течение 138 мс.
-
Однако, если я изменю SELECT
на DELETE
, например,
DELETE
FROM `database1`.`table_x`
WHERE `code` NOT IN (SELECT `code`
FROM `database2`.`table_y`);
Запрос зависает - ошибки не возвращаются,поэтому мне придется вручную отменить запрос примерно через 3 минуты.
-
Может кто-нибудь посоветовать наиболее эффективный / быстрый способ достижения этого?