2013-12-11 43 views
0

我想加入2代表具有共同的列「NAME」,但數據的排序是這樣的:SQL連接2個表,如果他們有相似的名稱/值


表A

NAME 
B C Corporations 
Tefal Inc. 
West, Tom 
Anne Zagabi 
(C) NamyangSoy 

表B

NAME 
BC Corporations 
Tefal Inc 
Tom West 
AnneZagabi 
(C) NamyangSoy 

以上是我遇到的情況。 這真的很難看,但有一件事讓我認爲它可能與SQL是至少有一個字的拼寫是相同的兩個表。

但是,我試過soundex,但代碼實際上不是英文,所以它沒有工作(以上只是我用英文編寫的一個例子)。我嘗試了差異函數,但它也沒有工作(一切都有價值4,我猜是因爲它不是英文?我不確定)。

我嘗試加入書信,但它也沒有工作。我希望如果可能有任何其他方式可以完成......我使用的是sqlcanvas,而數據庫是sybase。兩個表格都有近30列,每個約有12,000行

+0

你忘了適當的標籤我_RDBMS_猜測它''soundex'的SQL-server'堂妹? –

+1

如果你看得更近,它會變得更加難看 - 這些表格將包含拼寫錯誤,重複,幾乎重複和類似的內容。我曾經做過類似的工作(合併不同的客戶數據庫) - 刪除空格並進行了精確匹配,然後可能與soundex匹配並刪除了其中的一些內容後,必須使用類似excel和join的東西(大約20% )手動記錄。我希望它是一次性任務:) – Arvo

+0

你對這些表@ user2810030期望什麼輸出? –

回答

1

這樣的工作對你有用嗎?

SELECT * FROM [表A]一個加入[表B] b 在REPLACE(a.Name, '', '')= REPLACE(b.Name, '', '')

使用Replace函數刪除所有空格並比較結果。

對於exampe,運行該

select 
CASE 
WHEN REPLACE('T E S T', ' ', '') = REPLACE('TE ST', ' ', '') THEN 'TRUE' else 'FALSE' 
END 

使用代碼來替換所有的非字母字符:

CREATE FUNCTION [dbo].[fncRemoveNonAlphanumericChars](@Temp VarChar(1000)) 
RETURNS VarChar(1000) 
AS 
BEGIN 
WHILE PatIndex('%[^A-Za-z0-9]%', @Temp) > 0 
SET @Temp = Stuff(@Temp, PatIndex('%[^A-Za-z0-9]%', @Temp), 1, '') 

RETURN @TEmp 
END 

實施例:

SELECT dbo.fncRemoveNonAlphanumericChars('abc...DEF,,,GHI(((123)))456jklmn') 

結果:

abcDEFGHI123456jklmn

(這是從這裏:http://jayhollingum.blogspot.com/2011/01/sql-server-remove-non-alphanumeric.html

+0

我認爲這樣做可以做到這一點,我會在兩個表格中改進名稱列,然後加入一個類似的命令?我在午餐時出門,但是一旦我回來,我會盡快嘗試! – user2810030

相關問題