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
以处理子查询中的多行)
您应该建立从 attendees
到 event
与 on delete cascade
的外键关系。
然后,当您删除活动时,与会者将被自动删除。
您可以阅读有关外键关系的更多信息here。
我是 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
以处理子查询中的多行)
您应该建立从 attendees
到 event
与 on delete cascade
的外键关系。
然后,当您删除活动时,与会者将被自动删除。
您可以阅读有关外键关系的更多信息here。