在我打电话给鬼魂杀手之前,我来这里是想试试技术的,哈哈,
嗯,我的Postgre数据库里有一个表,里面有284814条记录,我在找重复的记录,用这个语句
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
我的问候
最佳答案
这可能不是一个答案,但是。. .
代码:
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/