Удалить из одной таблицы с объединением - PullRequest
32 голосов
/ 11 ноября 2010

Я пытаюсь удалить записи из одной базы данных на основе критериев выбора другой.У нас есть две таблицы, emailNotification, в которых хранится список вакансий и электронных писем.Тогда у нас есть работа.Я хочу очистить emailNotifications для рабочих мест, которые были закрыты.Я нашел несколько более ранних примеров Stackoverflow, которые привели меня к синтаксису такого типа (ранее я пытался выполнить соединение до, где).

DELETE FROM emailNotification
WHERE notificationId IN (
 SELECT notificationId FROM emailNotification e
 LEFT JOIN jobs j ON j.jobId = e.jobId
WHERE j.active = 1
)

Я получаю сообщение об ошибке, вы не можете указать целевую таблицу 'emailNotication' для обновления в предложении FROM.

Ответы [ 4 ]

85 голосов
/ 11 ноября 2010

Я не уверен насчет вашего требования.Из вашего вопроса я понял, что вы хотите удалить все электронные письма о вакансиях, которые закрыты.попробуйте это;

DELETE e FROM emailNotification e 
LEFT JOIN jobs j ON j.jobId = e.jobId 
WHERE j.active = 1 AND CURDATE() < j.closeDate
7 голосов
/ 05 августа 2015

УДАЛИТЬ MySQL с помощью JOIN

Удалить несколько записей из нескольких таблиц с помощью Single Query, как показано ниже:

Обычно вы используете INNER JOIN в операторе SELECT для выбора записей из таблицы, которые имеют соответствующие записи в других таблицах. Мы также можем использовать предложение INNER JOIN с оператором DELETE для удаления записей из таблицы, а также соответствующих записей в других таблицах, например, чтобы удалить записи из таблиц T1 и T2, которые удовлетворяют определенному условию, вы используете следующую инструкцию: 1005 *

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition

Обратите внимание, что вы ставите имена таблиц T1 и T2 между DELETE и FROM. Если вы опустите таблицу T1, оператор DELETE удалит только записи в таблице T2, а если вы опустите таблицу T2, будут удалены только записи в таблице T1.

Условие соединения T1.key = T2 .key указывает соответствующие записи в таблице T2, которые необходимо удалить.

Условие в предложении WHERE указывает, какие записи в T1 и T2 необходимо удалить.

3 голосов
/ 11 ноября 2010

Вы можете попробовать что-то вроде следующего:

DELETE FROM emailNotification
WHERE jobId IN (
 SELECT jobId FROM jobs j
 WHERE j.active = 1
)
1 голос
/ 21 октября 2018

Если целью является удаление совпадающих строк, например, удаление строк в 1-й таблице, которые имеют отношения во 2-й, во избежание удаления всей 1-й таблицы, вы должны поставить дополнительное условие "где" для 2-й таблицы

DELETE f FROM firsttable f 
LEFT JOIN secondtable s ON f.related_id = .jobId 
WHERE s.related_id
...