2010-10-12 70 views
0

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

下面是一些简单的伪代码来说明什么,我需要做的:

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

这里是一个example ..try它改变您的需求。

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

谢谢你的例子,但是在这个例子中,它只能处理精确的重复。我需要检查可能不完全相同的类似记录。 – BradB 2010-10-12 22:20:15

+0

您可以添加having子句另一个条件'或电子邮件LIKE“%相似%”'检查对于类似的项目.. – Vishal 2010-10-12 22:30:25

+0

我打算使用FTS与LIKE操作不复杂的足够我的要求。你有没有用你的例子的风格使用FTS JOIN? DO-能? – BradB 2010-10-12 23:01:25

0

你可以写一个存储过程,并安排维修计划运行,或者你可以在SQL Server上使用嵌入式C#代码,这样你就可以在数据库端与C#伊斯利建立更好的算法。或者您可以为可以正常运行的批处理作业编写一个Windows服务。

1

数据库是在处理不同信息片段真的很不错。他们不善于处理准明确的信息。

这样说,看看soundexfunction是否工作(足够好)用于分组类似的输入。

而且,对于上帝的爱,请勿在生产环境中使用这样的东西

相关问题