在我调用捉鬼敢死队之前,我来这里是为了尝试技术哈哈,
好吧,我的 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/