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