我找不到合适的sql语句
我有3张桌子:
1.) Messages
2.) Mail_Inbox
3.) Mail_Outbox
新消息存储在消息中,其ID存储在其他表中。 用户可以从收件箱和发件箱文件夹中删除邮件。
我想要解析一个单独的sql语句来删除“消息”中的所有条目,其中Inbox和Outbox中没有相应ID的条目。
我仍然找到了一个工作语句,告诉我正确的ID,但我找不到删除它们的方法。
SELECT Messages.Message_ID
FROM `Messages`
LEFT JOIN Mail_Inbox On Messages.Message_ID = Mail_Inbox.Message_ID
LEFT JOIN Mail_Outbox On Messages.Message_ID = Mail_Outbox.Message_ID
WHERE ISNULL(Mail_Outbox.Mail_ID) AND ISNULL(Mail_Outbox.Mail_ID)
我试过了:
DELETE FROM Messages
WHERE Message_ID = (SELECT Messages.Message_ID
FROM `Messages`
LEFT JOIN Mail_Inbox On Messages.Message_ID = Mail_Inbox.Message_ID
LEFT JOIN Mail_Outbox On Messages.Message_ID = Mail_Outbox.Message_ID
WHERE ISNULL(Mail_Outbox.Mail_ID) AND ISNULL(Mail_Outbox.Mail_ID))
但是出现了这个错误:您无法在FROM子句
中指定要更新的目标表'Messages': - (
答案 0 :(得分:1)
根据{{3}},无法使用要从子查询中删除的表 - 文档
SELECT
Messages.Message_ID
FROM `Messages`
LEFT JOIN Mail_Inbox ON Messages.Message_ID = Mail_Inbox.Message_ID
LEFT JOIN Mail_Outbox ON Messages.Message_ID = Mail_Outbox.Message_ID
WHERE ISNULL(Mail_Inbox.Mail_ID) AND ISNULL(Mail_Outbox.Mail_ID)
变为
DELETE
Messages
FROM `Messages`
LEFT JOIN Mail_Inbox ON Messages.Message_ID = Mail_Inbox.Message_ID
LEFT JOIN Mail_Outbox ON Messages.Message_ID = Mail_Outbox.Message_ID
WHERE ISNULL(Mail_Inbox.Mail_ID) AND ISNULL(Mail_Outbox.Mail_ID)
答案 1 :(得分:-2)
DELETE FROM Messages WHERE Message_ID IN (some subquery that select Message_IDs)
您当前的子查询将为您提供所有Message_ID,并将删除所有邮件,因为您使用LEFT JOIN。使用INNER JOIN。