SQL 通过选择外键删除行

SQL delete rows by selection of foreign keys

我是 SQL 的初学者,我想编写一个脚本,从 MySQL 数据库的 2 个表中删除行。

我有活动和参加者,我想从超过 90 天的活动中删除所有参加者和活动数据。 所以我需要找到一组 event_ids 的旧事件,然后删除所有引用该数组中任何 event_id 的与会者。

解决该问题的最佳方法是什么?这是我的想法:

DELETE * FROM attendees WHERE event_id = ANY (SELECT id FROM events WHERE enddate <= DATE_ADD(CURDATE(), INTERVAL -90 DAY))

DELETE * FROM events WHERE enddate <= DATE_ADD(CURDATE(), INTERVAL -90 DAY)

删除查询不应使用*

DELETE  FROM attendees WHERE event_id = IN  (SELECT id FROM events WHERE enddate <= DATE_ADD(CURDATE(), INTERVAL -90 DAY))


DELETE  FROM events WHERE enddate <= DATE_ADD(CURDATE(), INTERVAL -90 DAY)

(编辑:添加 ANY 以处理子查询中的多行)

您应该建立从 attendeeseventon delete cascade 的外键关系。

然后,当您删除活动时,与会者将被自动删除。

您可以阅读有关外键关系的更多信息here