查找表中所有列都相同的重复记录

dz6r00yl  于 2021-08-09  发布在  Java
关注(0)|答案(4)|浏览(379)

假设我有一个有数百列的表。任务是我要找出所有列都相同的重复记录,基本上找出相同的记录。
我试着分组如下

select *
from some_table
group by *
having count(*) > 1

但看起来 group by * 在sql中不允许。有人知道我可以用什么命令来找出相同的记录吗?提前谢谢。

2j4z5cfb

2j4z5cfb1#

只需将逗号分隔的列列表而不是 * 在这两个地方- select 以及 group by . 不买 count -那个 count(*) 应该保持原样。
我在SQLServer上验证了它,但我非常确定它是ansi sql,应该可以在大多数(任何?)与ansi sql兼容的rdbms上使用。

enxuqcxy

enxuqcxy2#

我想是postgresql解决方案。
选择所有行,并使用except all删除每行中的一行(select distinct)。现在我们只有副本了。

select * from table
except all
select distinct * from table
bttbmeg0

bttbmeg03#

必须列出所有列:

select col1, col2, col3, . . .
from t
group by col1, col2, col3, . . .
having count(*) > 1;
hsvhsicv

hsvhsicv4#

mssql 2016年+
在表中添加一个新列来散列所有列,mssql hashbytes
注意事项:
您需要将所有列转换为varchar或varbinary。
比较是否区分大小写,如果是,请使用upper()或lower()
空值,使用列说明符。
哈希算法在服务器上的性能。
对我来说通常是这样的

select col1 , col2, col3 , col4 
,HASHBYTES ( 'MD5',
concat( 
      Convert (varbinary ,col1),'|'
     ,Convert (varbinary ,col2),'|'
     ,Convert (varbinary ,col3),'|'
     ,Convert (varbinary ,col4),'|'
     )
          ) as Row_Hash
  from table1

行散列可以用作table/cte中的单个列,以表示所有其他列的内容
你可以按它数数,然后按它排序,找到重复的

相关问题