SQL通过选择外键来删除行

时间:2015-06-24 09:30:37

标签: mysql sql dependencies 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)

2 个答案:

答案 0 :(得分:1)

删除查询不应使用*

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来处理子查询中的多行)

答案 1 :(得分:0)

您应该使用attendees设置从eventon delete cascade的外键关系。

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

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