你能帮我用SQL语句查找多个字段的重复项吗?
例如,在伪代码中:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
并且从上面的语句 * 如果存在多个出现 *,我想要选择 * 除了第一个记录之外的每个记录 *。
你能帮我用SQL语句查找多个字段的重复项吗?
例如,在伪代码中:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
并且从上面的语句 * 如果存在多个出现 *,我想要选择 * 除了第一个记录之外的每个记录 *。
9条答案
按热度按时间roejwanj1#
要获取具有多条记录的字段列表,可以使用..
有关如何删除行的详细信息,请查看此链接。
http://support.microsoft.com/kb/139444
在你使用上面链接中的方法之前,应该有一个标准来决定你如何定义“第一行”。基于这个标准,你需要使用一个order by子句和一个子查询。如果你能发布一些示例数据,那将非常有帮助。
xbp102n02#
你提到了“第一个”,所以我假设你的数据有某种排序,让我们假设你的数据按某个字段
ID
排序。这个SQL应该会得到除了第一个条目之外的重复条目。它基本上选择了所有行,对于这些行,另一行具有(a)相同的字段和(b)较低的ID。性能不会很好,但它可能会解决您的问题。
bxpogfeg3#
这是我喜欢的SQL Server 2005的一个有趣的解决方案。我将假设“对于除第一个记录之外的每个记录”,您的意思是有另一个“id”列,我们可以使用它来标识哪一行是“第一个”。
8zzbczxx4#
要查看重复值:
muk1a3rh5#
如果您使用的是SQL Server 2005或更高版本(问题的标记表示SQL Server 2008),并且由于某种原因使用联接不太理想或不切实际,则可以使用排名函数返回第一个记录之后的重复记录。以下示例实际显示了这一点,其中它也适用于所检查列中的空值。
请注意,运行此示例后,每个“组”中的第一条记录都被排除,并且具有空值的记录得到了正确处理。
如果没有可用于对组中的记录进行排序的列,则可以使用分区依据列作为排序依据列。
brc7rcf06#
hec6srdp7#
尝试使用此查询查找多个字段中的重复记录
oyjwcjzk8#
您还可以尝试使用此查询来计算
distinct()
列和包含所需列的order by
:pod7payv9#
尝试使用以下查询对每个SELECT语句进行单独计数: