我正在尝试根据另一个数据库的选择标准从一个数据库中删除记录。我们有两个表,emailNotification,用于存储作业和电子邮件列表。然后我们有工作。我想清除已关闭的作业的电子邮件通知。我在Stackoverflow上发现了一些早期的例子,它们引导我使用这种语法(我之前尝试在where之前进行连接)。
DELETE FROM emailNotification
WHERE notificationId IN (
SELECT notificationId FROM emailNotification e
LEFT JOIN jobs j ON j.jobId = e.jobId
WHERE j.active = 1
)
我收到错误,您无法在FROM子句中指定目标表'emailNotication'进行更新。
答案 0 :(得分:85)
我不确定你的要求。 我从您的问题中理解的是,您要删除已关闭的所有作业的电子邮件。 试试这个;
DELETE e FROM emailNotification e
LEFT JOIN jobs j ON j.jobId = e.jobId
WHERE j.active = 1 AND CURDATE() < j.closeDate
答案 1 :(得分:6)
MySQL使用JOIN删除记录
使用Single Query从多个表中删除多个记录如下:
通常在SELECT语句中使用INNER JOIN从表中选择具有其他表中相应记录的记录。我们还可以使用带有DELETE语句的INNER JOIN子句来删除表中的记录以及其他表中的相应记录,例如,要删除满足特定条件的T1和T2表中的记录,请使用以下语句: / p>
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中的哪些记录。
答案 2 :(得分:3)
您可以尝试以下内容:
DELETE FROM emailNotification
WHERE jobId IN (
SELECT jobId FROM jobs j
WHERE j.active = 1
)
答案 3 :(得分:1)
如果目标是删除匹配的行,例如删除第一张表中与第二张表有关系的行,则为避免删除整个第一张表,应为第二张表添加附加的“ where”条件
DELETE f FROM firsttable f
LEFT JOIN secondtable s ON f.related_id = .jobId
WHERE s.related_id