+-

查询的目标还在于找到错误输入的可能重复的名称.例:
必须将International Group Inc.作为International,Group Inc的副本
为了实现这一点,使用了下一个查询:
SELECT C.id, C.name, C.address, C.city_id FROM company C INNER JOIN (SELECT name FROM company GROUP BY name HAVING Count(id) > 1) D ON Replace(Replace(C.name, '.', ''), ',', '') = Replace(Replace(D.name, '.', ''), ',', '')它效果很好,结果是40秒,但添加一个额外的条件,如AND C.city_id =’4’需要额外的一分钟或更长时间;这仍然可以接受但不是优选的.
当我尝试添加另一个条件以查找名称中具有特定字符串的公司的重复项时,使用此条件并且C.name LIKE’%International%’,这只是不返回任何结果,我的真正问题就出现了.
有人可以帮我弄清楚我做错了什么吗?
谢谢
最佳答案
因为您正在加入函数的结果,所以查询不能使用任何索引.此外,在所有行上执行REPLACE()的成本可能不可忽略.
我建议您首先添加一个索引列,该列接收字符串的“精简版”,然后在此列上使用连接运行查询:
ALTER TABLE company ADD COLUMN stripped_name VARCHAR(50); ALTER TABLE company ADD INDEX(stripped_name); UPDATE TABLE company SET stripped_name = REPLACE(REPLACE(name, '.', ''), ',', '') ;第一次运行UPDATE可能需要一段时间,但您也可以在公司上设置ON UPDATE和ON INSERT触发器,以便在运行时填充stripped_name并进行更新.
点击查看更多相关文章
转载注明原文:为MySQL Inner Join添加多个条件 - 乐贴网