我使用此查询来计算表格中的所有行" books",其中" name"列值重复自我:
SELECT name, COUNT(*) c FROM books GROUP BY name HAVING c > 1
问题是,我想对待非常相似的书名,因为"重复"。例如,名为" Good Book"和#34;好书。"会被认为是相同的。我知道,或多或少,如何使用REGEXP和通配符,但我不知道如何将它合并到我使用的查询中(如果它甚至可能......)。
有没有办法实现这个目标?
答案 0 :(得分:1)
有一个名为SOUNDEX
的MYSQL字符串函数。这是一个很长的范围,但可能只是做你需要的。 SOUNDEX
应返回相同的"代码字符串"对于两个听起来相同的文本字符串。见this link for more about SOUNDEX
所以你可以尝试这个尺寸
SELECT SOUNDEX(name) as sname, COUNT(*) c FROM books GROUP BY sname HAVING c > 1
使用正则表达式您需要更加具体地了解您想要实现的效果,因为问及您是否只想删除标点符号或者还有更多内容可供您查看类似。
前瞻性方法是添加另一个列,让我们说UNIFORM_NAME
并使用单独的工具/流程填充该列,例如在向表中添加项目时。如果您计划多次运行此类查询,这将非常有用。然后,您可以对这个新列使用您的SQL代码,如果您发明了一种新的(更好的)协调比较名称的方法,您可以根据名称和新算法更新该新列,并且您的解决方案的其余部分将起作用无需进一步更改。