You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除reminder和reminder_users表冗余数据并保留单条有效记录

操作前置要求

执行删除前务必先备份全量数据,避免误删无法恢复:

-- 备份子表
CREATE TABLE reminder_users_bak AS SELECT * FROM reminder_users;
-- 备份父表
CREATE TABLE reminder_bak AS SELECT * FROM reminder;

第一步:删除子表reminder_users冗余行

逻辑为按r.name, r.remark, u.user_id, u.deadline分组,每组保留1条记录(以下示例保留每组rowid最大的行,如需保留最早插入的行可将MAX改为MIN):

DELETE FROM reminder_users u
WHERE u.rowid NOT IN (
    SELECT MAX(u2.rowid) AS keep_rowid
    FROM reminder r
    INNER JOIN reminder_users u2 ON r.id = u2.reminder_id
    GROUP BY r.name, r.remark, u2.user_id, u2.deadline
);

执行删除前建议先将DELETE替换为SELECT *查询要删除的行,确认符合预期后再执行删除操作

第二步:删除父表reminder冗余行

子表删除完成后,父表中无对应子表关联的行即为冗余行,直接删除即可:

DELETE FROM reminder r
WHERE NOT EXISTS (
    SELECT 1 FROM reminder_users u WHERE u.reminder_id = r.id
);

兼容说明

如果你使用的是MySQL这类不支持rowid的数据库,可以将上述语句中的rowid替换为子表的主键字段(比如子表主键为id则替换为u.id),逻辑完全一致。

内容的提问来源于stack exchange,提问作者schmimla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:57:00