2010-10-12 52 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是否工作(足夠好)用於分組類似的輸入。

而且,對於上帝的愛,請勿在生產環境中使用這樣的東西

相關問題