我想在使用MySQL的客戶表中查找所有重複的記錄名稱,包括那些不完全匹配的記錄。在MySQL中使用LIKE查找重複記錄
我知道我可以使用查詢
SELECT id, name FROM customer GROUP BY name HAVING count(*) > 1;
找到完全匹配的所有行,但我想找到一個LIKE
語句匹配所有重複行。例如,可能有一個名爲「Mark's Widgets」的顧客和另一個「Mark's Widgets Inc.」我想我的查詢找到這些重複。所以沿線
SELECT id, name AS name1 ... WHERE name1 LIKE CONCAT("%", name2, "%") ...
我知道這是完全不正確的,但這就是主意。這裏是能夠架構:
mysql> describe customer;
+-----------------------------+--------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+--------------+------+-----+------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(140) | NO | | NULL | |
...
編輯:爲了澄清,我想找到所有重複,不只是一個具體的客戶名稱的副本。
我認爲一個好的開始是一個名字是另一個子字符串。我在尋找的匹配類型是name1 LIKE%name2% – markb 2010-02-12 23:38:48
@markb,好的,我編輯了一個可能的解決方案。 – 2010-02-12 23:57:02
以下是MySQL語法:SELECT t1.ID,t1.name FROM customer t1 LEFT OUTER JOIN customer t2 ON t1.name LIKE CONCAT('%',t2.name,'%')group by t1.ID HAVING count( *)> 1; – markb 2010-02-15 15:54:49