Как удалить строки из таблицы в базе данных X, где идентификатор существует в базе данных Y - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть 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 минуты.

-

Может кто-нибудь посоветовать наиболее эффективный / быстрый способ достижения этого?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Попробуйте следующий запрос:

 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;
0 голосов
/ 12 сентября 2018

попробуйте как ниже, это будет работать

DELETE FROM table_a WHERE `code` NOT IN (      

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

     );
...