📜  como verificar registros duplicados no sql postgresql (1)

📅  最后修改于: 2023-12-03 15:00:00.634000             🧑  作者: Mango

如何在 PostgreSQL 中检查重复记录

在 PostgreSQL 中检查记录是否重复通常涉及使用 DISTINCT 子句或 GROUP BY 语句进行聚合。但是,如果您需要进行更复杂的比较或需要找到确切的重复记录,可以使用以下方法来查找重复记录。

方法1:使用子查询

使用子查询是找到重复记录的一种非常有效的方法。

SELECT *
FROM my_table t1
WHERE EXISTS (
  SELECT 1
  FROM my_table t2
  WHERE t1.id <> t2.id
  AND t1.column1 = t2.column1
  AND t1.column2 = t2.column2
)

上面的查询将返回所有包含重复值的记录,它会比较每个记录的两个列,即 column1column2,并返回所有与其他记录中的至少一条相同的记录。

方法2:使用窗口函数

使用窗口函数也可以找到重复记录。

WITH my_cte AS (
  SELECT *,
    ROW_NUMBER() OVER (
      PARTITION BY column1, column2
      ORDER BY id
    ) AS rn
  FROM my_table
)
SELECT *
FROM my_cte
WHERE rn > 1;

上面的查询使用了 ROW_NUMBER 窗口函数,并在 column1column2 上进行了分区,并且保留了 id 列来确定排列顺序。这将返回所有列能在 column1column2 上与另一行匹配的记录。

方法3:使用 HAVING 子句

使用 HAVING 子句和 COUNT 聚合函数也可以找到重复记录。

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

上述查询使用了 GROUP BY 子句将 column1column2 分组,然后使用 COUNT 函数返回具有相同值的记录数。HAVING 子句过滤掉计数为1的记录,只留下重复记录。

方法4:使用 DISTINCT ON 子句

DISTINCT ON 子句可以返回指定列的唯一值,但是也可以找到重复记录。

SELECT DISTINCT ON (column1, column2) *
FROM my_table
ORDER BY column1, column2, id;

上述查询使用 DISTINCT ON 子句返回所有唯一的 column1column2 值对,但是保留了 id 列作为第三个排序列。这将返回具有相同 column1column2 值的记录中的第一个记录。可以使用这个查询来找出所有重复的记录。

以上就是在 PostgreSQL 中检查重复记录的方法。使用这些方法可以帮助您快速找到重复记录,并从数据库中删除它们以保持数据完整性。

注意:针对大型数据集,这些方法可能会比较费时。在处理大型数据集时,请使用适当的索引来提高查询性能。

参考:How to Check Duplicates in PostgreSQL