如何删除 Posgresql 中的所有重复行(不留下任何重复行)

ame*_*mer 2 sql postgresql

我想从数据库中删除具有相同名称的行。我检查了 Stackoverflow 并发现了类似这样的内容:

DELETE
FROM my_table mt1 USING my_table mt2
WHERE mt1.my_name = mt2.my_name AND mt1.unique_id<mt2.unique_id;
Run Code Online (Sandbox Code Playgroud)

这当然有效,但会留下一行。我有一个请求:

如果存在重复行,我必须删除所有行(不留一个)。

Jon*_*ler 6

我们可以使用GROUP BYwithHAVING子句作为子查询:

DELETE
FROM my_table 
WHERE my_name IN 
(SELECT
    my_name
FROM
    my_table
GROUP BY
    my_name
HAVING 
    COUNT(*) > 1);
Run Code Online (Sandbox Code Playgroud)

尝试一下:db<>fiddle