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

PostgreSQL:如何删除tblperson表中的重复记录?

要删除你筛选出的(未出现在tblorder表中)重复记录里的第二条(对应按ID升序排序后的同姓名组中ID更大的那条),可以在你提供的删除示例基础上,加上范围筛选条件,具体SQL语句如下:

DELETE FROM tblperson dup_lang
USING tblperson dist_lang
WHERE 
    dup_lang.firstname = dist_lang.firstname
    AND dup_lang.lastname = dist_lang.lastname
    -- 指定删除ID更大的那条,对应排序后的第二条重复记录
    AND dup_lang.id > dist_lang.id
    -- 确保被删除的记录不在tblorder表中
    AND NOT EXISTS (SELECT 1 FROM tblorder p WHERE p.id = dup_lang.id)
    -- 确保用来对比的基准记录也在目标范围内
    AND NOT EXISTS (SELECT 1 FROM tblorder p WHERE p.id = dist_lang.id);

如果你的需求是保留ID更大的那条、删除排序后的第一条(ID更小的重复记录),只需要把dup_lang.id > dist_lang.id改成dup_lang.id < dist_lang.id即可。

这条语句的核心逻辑:通过关联同表找出姓名重复的记录对,用ID大小确定删除目标,再通过NOT EXISTS限定只处理未出现在tblorder里的记录,避免误删其他数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:06