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

如何在PostgreSQL中删除所有重复行(不留任何一条)

删除所有重复行(无保留)的SQL方案

你需要的是删除所有存在重复my_name的行(只要某个名称出现多次,就把该名称对应的所有行全删掉),可以用下面两种方式实现:

方法一:子查询匹配重复名称

DELETE FROM my_table
WHERE my_name IN (
    SELECT my_name
    FROM my_table
    GROUP BY my_name
    HAVING COUNT(*) > 1
);

逻辑很直接:先通过子查询找出所有出现次数超过1的my_name,再删除表中所有属于这些名称的行。

方法二:JOIN关联删除

DELETE mt1
FROM my_table mt1
JOIN (
    SELECT my_name
    FROM my_table
    GROUP BY my_name
    HAVING COUNT(*) > 1
) mt2 ON mt1.my_name = mt2.my_name;

这种方式用JOIN关联原表和重复名称的子查询,批量删除关联上的所有行,效果和方法一一致。

和你之前找到的SQL不同,这两个语句不会保留重复组里的任何一行,完全清除所有存在重复的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:10:28