2012-09-05 68 views
0

鑑於我的表MySQL的:尋找類似的重複條目

id | name 
01| Test Name 
02| Name Test 
03| Another name 
... 
... 
nn| Test string 

我想做到以下幾點,對每一個條目,閱讀的第一個字,直到一個空間,所以在這個例子中,我會讀取測試,然後,找到所有類似的條目,其中包含測試的任何地方上的字符串,然後繼續名稱,另外等等。

我不想手動做到這一點,因爲我不得不做出一個許多疑問,這個想法是將數據從舊的Excel電子表格導入,客戶希望得到反覆的名字,所以測試名稱,測試的東西名稱名稱測試是潛在的類似名稱。

+1

不要害羞分解過程.. – Deepak

回答

2

這裏是我的數據庫解決方案:

SELECT * 
FROM princess a 
INNER JOIN (SELECT 
     DISTINCT CASE 
      WHEN name LIKE '% %' 
       THEN SUBSTR(name, 1, LOCATE(' ', name) - 1) 
      ELSE name 
     END AS 'name' 
    FROM princess) b ON a.name LIKE CONCAT('%', b.name ,'%') 

這將找到DISTINCT姓名(空格​​前),然後JOIN使用LIKE原始表。

您也可以考慮使用INSTR(a.name, b.name)來代替b.name LIKE CONCAT('%', a.name ,'%'),具體取決於EXPLAIN的外觀。

+0

非常感謝!這會做! :) – gosukiwi

+0

@gosukiwi不客氣。希望表現不會成爲問題。 – Kermit

+0

不是真的,查詢將會運行一次,並且只能由管理員執行,所以它很好。 – gosukiwi

0

有很多關於如何在MySQL中將字符串拆分成多行的例子, this one

之後,您可以輕鬆找到完全匹配。如果你想不完全匹配,看看SOUNDEX()