sql - Postgres 中的鬼行

标签 sql postgresql duplicates

在我调用捉鬼敢死队之前,我来这里是为了尝试技术哈哈,

好吧,我的 Postgre 数据库中有一个包含 284814 条记录的表,我一直在寻找重复的记录,使用这个 statmente

select grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, count(numero) 
from conhecimento 
group by grupo, empresa, filial, unidade, diferenciadornumero, serie, numero 
having count(numero) > 1

它返回给我五个记录:

1;1;9;1;2;9;24712;2
1;1;9;1;2;9;24708;2
1;1;9;1;2;9;24711;2
1;1;9;1;2;9;24713;2
1;1;9;1;2;9;24709;2

之后,我尝试一条一条地查看这些记录,使用复合键来获取记录,使用以下语句:

select grupo, empresa, filial, unidade, diferenciadornumero, serie,
       numero, ctid
from conhecimento 
where grupo = 1 and empresa = 1 and
      filial = 9 and unidade = 1 and diferenciadornumero = 2 and serie = 9 and 
      numero = 24712

令我惊讶的是,这个查询只返回一条记录,

1;1;9;1;2;9;24712;(7986,5)

所以,现在我试图理解 Postgre 是如何告诉我在这 5 条记录中有重复记录的,但是当我试图从表中恢复这些记录时,只返回一行,

我也用过这个查询

select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
             ROW_NUMBER() OVER (PARTITION BY grupo, empresa, filial, unidade,
                                             diferenciadornumero, serie, numero
                               ) AS Row
      FROM conhecimento
     ) dups
where  dups.Row > 1

但是没有运气,有人知道发生了什么事吗?

这是我的关键 grupo, empresa, filial ,unidade, diferenciadornumero, serie, numero 的组成。我的 table 是 conhecimento

我最好的问候

最佳答案

这可能不是答案,但是。 . .

代码:

select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
             ROW_NUMBER() OVER (PARTITION BY grupo, empresa, filial, unidade,
                                             diferenciadornumero, serie, numero
                               ) AS Row
      FROM conhecimento
     ) dups
where  dups.Row > 1

仅返回每条记录的第二个 示例。您实际上不需要 row_number(),您需要 count():

select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
             count(*) OVER (PARTITION BY grupo, empresa, filial, unidade,
                                         diferenciadornumero, serie, numero
                           ) AS cnt
      FROM conhecimento
     ) dups
where  dups.cnt > 1;

关于sql - Postgres 中的鬼行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263768/

相关文章:

android - 在填充 ListView 时,我在 android 的 ListView 中得到重复值

c++ - SOCI(SQL C++ 包装器)- PostgreSQL 不执行命令(?)

sql - 汇总数据的分组依据

R 无法通过 rPostgreSQL 将表写入 PostgreSQL

postgresql - 使用 Flask 将 Docker 容器连接到 App Engine 中的 PostgreSQL 时出现问题

r - 如何删除r中data.table中的所有重复行

dictionary - 如何在 clojure 中检查 map 中的重复项?

mysql - 通过在sql中对多个列进行分组来查找列中的最小值

MySQL 触发器 - 获取对象的 DDL 时出错

sql - 为性能选择索引和主键