SQL检测同一数据库表中的类似记录

时间:2010-10-12 21:50:30

标签: sql-server tsql sql-server-2008 full-text-search

我需要循环访问数据库表中的记录并对具有相似内容的项进行分组。我想匹配数据库中的单个列,如果有类似的记录,我想提取每行的ID并将其保存到另一个表,例如如果我有10个相似的行,它们将链接到另一个表中的一个“标题”记录。

下面是一些简单的伪代码来说明我需要做的事情:

For Each record in table

     If There is a similar record in header table Then
      Link this record to matching header table record 
     Else
      Create new Header record and link this record
     End If

End For

我正在使用带有全文搜索的MSSQL 2008,这将为我提供选择类似记录所需的机制。目前,我计划在C#代码中创建四个循环,并通过调用存储过程来检查匹配记录,从而在SQL中进行匹配和保存。

有些东西告诉我这一切都应该在单个存储过程中完成(而其他东西告诉我在代码中保留逻辑!)。

在SQL中有没有更简洁的方法呢?

4 个答案:

答案 0 :(得分:1)

数据库非常善于处理不同的信息。他们不善于处理准不同的信息。

如上所述,请查看soundex function是否有效(足够好)以便对类似输入进行分组。

而且,对于上帝的爱,不要在生产环境中使用这样的任何

答案 1 :(得分:0)

以下是example ..尝试根据您的需要进行更改。

SELECT email, 
 COUNT(email) AS NumOccurrences
FROM users
GROUP BY email
HAVING ( COUNT(email) > 1 )

答案 2 :(得分:0)

您可能需要查看SQL Server 2008中新增的MERGE语句。例如,请参阅:Inserting, Updating, and Deleting Data by Using MERGE

答案 3 :(得分:0)

你可以编写一个sproc并安排一个维护计划来运行,或者你可以在sql server上使用嵌入式c#代码,这样你就可以使用c#在db方面轻松构建更好的算法。或者您可以为可以定期运行的批处理作业编写Windows服务。