Подтвердить что ты не робот

Удалить из одной таблицы с помощью соединения

Я пытаюсь удалить записи из одной базы данных на основе критериев выбора другого. У нас есть две таблицы, 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.

4b9b3361

Ответ 1

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

DELETE e FROM emailNotification e 
LEFT JOIN jobs j ON j.jobId = e.jobId 
WHERE j.active = 1 AND CURDATE() < j.closeDate

Ответ 2

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

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

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

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

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

DELETE FROM emailNotification
WHERE jobId IN (
 SELECT jobId FROM jobs j
 WHERE j.active = 1
)