假设我有一个有数百列的表。任务是我要找出所有列都相同的重复记录,基本上找出相同的记录。我试着分组如下
select * from some_table group by * having count(*) > 1
但看起来 group by * 在sql中不允许。有人知道我可以用什么命令来找出相同的记录吗?提前谢谢。
group by *
2j4z5cfb1#
只需将逗号分隔的列列表而不是 * 在这两个地方- select 以及 group by . 不买 count -那个 count(*) 应该保持原样。我在SQLServer上验证了它,但我非常确定它是ansi sql,应该可以在大多数(任何?)与ansi sql兼容的rdbms上使用。
*
select
group by
count
count(*)
enxuqcxy2#
我想是postgresql解决方案。选择所有行,并使用except all删除每行中的一行(select distinct)。现在我们只有副本了。
select * from table except all select distinct * from table
bttbmeg03#
必须列出所有列:
select col1, col2, col3, . . . from t group by col1, col2, col3, . . . having count(*) > 1;
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中的单个列,以表示所有其他列的内容你可以按它数数,然后按它排序,找到重复的
4条答案
按热度按时间2j4z5cfb1#
只需将逗号分隔的列列表而不是
*
在这两个地方-select
以及group by
. 不买count
-那个count(*)
应该保持原样。我在SQLServer上验证了它,但我非常确定它是ansi sql,应该可以在大多数(任何?)与ansi sql兼容的rdbms上使用。
enxuqcxy2#
我想是postgresql解决方案。
选择所有行,并使用except all删除每行中的一行(select distinct)。现在我们只有副本了。
bttbmeg03#
必须列出所有列:
hsvhsicv4#
mssql 2016年+
在表中添加一个新列来散列所有列,mssql hashbytes
注意事项:
您需要将所有列转换为varchar或varbinary。
比较是否区分大小写,如果是,请使用upper()或lower()
空值,使用列说明符。
哈希算法在服务器上的性能。
对我来说通常是这样的
行散列可以用作table/cte中的单个列,以表示所有其他列的内容
你可以按它数数,然后按它排序,找到重复的