📜  postgresql 删除重复行 2 列 - SQL (1)

📅  最后修改于: 2023-12-03 14:45:35.730000             🧑  作者: Mango

PostgreSQL 删除重复行的两列 - SQL

在 PostgreSQL 数据库中,经常会出现重复的数据行。有时候删除这些重复行是必要的,以保持数据的一致性和准确性。这篇文章将介绍如何使用 SQL 语句在 PostgreSQL 数据库中删除具有两列重复值的重复行。

查询重复行

在删除重复行之前,我们需要找出这些重复行。使用以下 SQL 语句查询具有两列重复值的重复行:

SELECT column1, column2, COUNT(*)
FROM table_name
GROUP BY column1, column2
HAVING COUNT(*) > 1;

在此查询中,我们使用了 GROUP BY 子句和 HAVING 子句来捕获重复行。我们选择了列 column1column2,因为这两列的值在唯一标识每个行时是必需的。我们通过在 GROUP BY 子句中引用这两列来分组所有行。然后,我们使用 HAVING 子句限制只返回具有重复值的组。最后,我们计算每个组的计数值,使用 COUNT(*) 来实现。

运行此查询时,将返回所有具有两列重复值的行。例如,如果我们有以下数据行:

column1 | column2 | column3
--------+---------+--------
A       | 1       | Hello
A       | 1       | World
B       | 2       | Foo
C       | 3       | Bar
C       | 3       | Baz

我们将获得以下查询结果:

column1 | column2 | count
--------+---------+-------
A       | 1       | 2
C       | 3       | 2

现在我们已经找到重复行,让我们以编程方式删除它们。

删除重复行

删除与上面查询中返回的每个组重复的行需要使用以下 SQL 语句:

DELETE FROM table_name
WHERE (column1, column2) IN (
    SELECT column1, column2
    FROM table_name
    GROUP BY column1, column2
    HAVING COUNT(*) > 1
);

此 SQL 语句使用 DELETE FROM 语句来从表中删除具有两列重复值的行。我们使用 WHERE 子句来指定要删除的行,这些行具有与最初查询中返回的组中的值相同的 column1column2 值。我们使用子查询来获得具有重复值的列和计算值的组。

这就是如何在 PostgreSQL 数据库中删除具有两列重复值的行的方法。

结论

在 PostgreSQL 数据库中删除重复行是一个常见的任务,可以帮助我们保持数据的一致性和准确性。使用 SQL 语句可以轻松地找到和删除重复行,如上所述。