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

SQL脚本编写需求:清理重复用户并更新关联Usage表

解决重复邮箱用户及Usage表关联更新问题

需求说明

清理User表中重复邮箱的冗余用户,仅保留user_id与email一致的记录;同时将Usage表中关联到冗余user_id的记录,统一更新为对应邮箱的目标user_id。

目标表现状

User表:

user_idemail
Aa@gmail.com
Ba@gmail.com
Ca@gmail.com
a@gmail.coma@gmail.com

Usage表:

iduser_idusage_time
1A10
2B444
3C4657
4a@gmail.com6334

分步执行脚本

1. 更新Usage表关联记录

将所有属于a@gmail.com邮箱的Usage记录,统一把user_id更新为目标值a@gmail.com:

UPDATE Usage u
JOIN User us ON u.user_id = us.user_id
SET u.user_id = us.email
WHERE us.email = 'a@gmail.com';

2. 删除User表冗余用户

移除a@gmail.com邮箱下user_id与邮箱不一致的冗余记录:

DELETE FROM User
WHERE email = 'a@gmail.com' AND user_id != email;

通用批量处理脚本(适用于所有重复邮箱场景)

如果需要处理全表所有重复邮箱的情况,可使用以下脚本:

更新所有重复邮箱对应的Usage记录

UPDATE Usage u
JOIN (
    -- 先找到每个邮箱对应的目标保留user_id(即user_id与邮箱一致的记录)
    SELECT email, user_id AS target_user_id
    FROM User
    WHERE user_id = email
) target_us ON u.user_id IN (
    SELECT user_id FROM User WHERE email = target_us.email
)
SET u.user_id = target_us.target_user_id;

删除所有冗余用户

DELETE FROM User
WHERE user_id != email
-- 仅删除存在对应保留用户的冗余记录
AND EXISTS (
    SELECT 1 FROM User us 
    WHERE us.email = User.email AND us.user_id = us.email
);

注意事项

  • 执行前必须备份数据,防止误操作导致数据丢失
  • 生产环境建议先在测试环境验证脚本逻辑
  • 可先通过SELECT语句预览操作结果,确认无误后再执行更新/删除:
    • 预览待更新的Usage记录:SELECT u.*, us.email FROM Usage u JOIN User us ON u.user_id=us.user_id WHERE us.email='a@gmail.com';
    • 预览待删除的User记录:SELECT * FROM User WHERE email='a@gmail.com' AND user_id != email;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:13:16