如何高效地查找重复的数据库条目(HSQL)



我有一个很大的名字表。每个条目都有一个惟一的ID、一个name和一个姓。如果不同的id有相同的名字和姓氏,这不一定是错误,但它经常是错误的,所以我想要一个列出嫌疑的查询。因为表很大,所以我不希望将其作为连接来执行,或者更确切地说:我不希望查询的表大小是二次的。如果我用函数式编程语言编写此代码,并且我的表只是一个三元组列表,我会这样做(在对数时间内):

  • 按姓氏排序
  • 将具有相同姓氏的相邻元素分组
  • 抛出单例组[这可以不使用长度函数]
  • 在这些组(map)中,按名称排序,然后分组,然后再次丢弃单例
  • 将这些组(两次)扁平化以返回三元组列表

我如何做这个作为一个SQL查询?上面的算法可能不是在db上运行的好算法,但接下来会是什么呢?我对输出的精确格式不太在意,因为输出只是供人使用的。我应该补充的是,我在OpenOffice的数据库,它是基于HSQL。

在SQL中使用GROUP BY和HAVING来做你想做的事情。例如:

SELECT FIRSTNAME, LASTNAME FROM CUSTOMER GROUP BY LASTNAME, FIRSTNAME HAVING COUNT(*) > 1 ORDER BY LASTNAME

注意ORDER BY子句是可选的