我需要循环访问数据库表中的记录并对具有相似内容的项进行分组。我想匹配数据库中的单个列,如果有类似的记录,我想提取每行的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中有没有更简洁的方法呢?
答案 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服务。