gpt4 book ai didi

mysql - 单个查询删除多条记录而不使用 InnoDB 关系(使用 JOIN?)

转载 作者:行者123 更新时间:2023-11-29 12:29:51 25 4
gpt4 key购买 nike

问题:我有 2 个相当大的表:message(+2000 万条记录 ~ 11GB)和 message_subject(1400 万条记录 ~ 3GB)需要“清理”。

如果邮件有主题,我需要删除所有超过 2 周的邮件以及相应的 message_subjects,但请务必注意,并非所有邮件都有主题以及超过 2 周的邮件没有主题的也需要删除。

这两个表没有通过 InnoDB 指定的关系,即使 message_subject 具有字段 message_id

如果使用ON DELETE CASCADE在两个表之间指定了关系,我可以从message和相应的message_subject中删除记录会自动删除,但事实并非如此。

我已经尝试过:

DELETE message, message_subject
FROM message
INNER JOIN faq
WHERE message.id = message_subject.message_id
AND message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)

删除有主题的邮件;超过 2 周且没有主题的邮件不会被删除。

DELETE message, message_subject
FROM message
INNER JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)

与第一个查询完全相同;它不会删除没有主题的旧消息。

有人可以帮我吗?

最佳答案

感谢 sgeddes 的评论,我能够使用以下查询解决问题:

DELETE message, message_subject
FROM message
LEFT OUTER JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)

这显然是相同的

DELETE message, message_subject
FROM message
LEFT JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)

关于mysql - 单个查询删除多条记录而不使用 InnoDB 关系(使用 JOIN?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com