我想在使用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