我使用这个查询来计算表“book”中的所有行,其中"name“列值自身重复:
SELECT name, COUNT(*) c FROM books GROUP BY name HAVING c > 1问题是,我想把非常相似的书名看作是“重复的”。例如,名为“好书”和“好书”的书。会被认为是相同的。我或多或少知道如何使用REGEXP和通配符,但我不知道如何将其合并到我正在使用的查询中(如果可能的话)。
有什么方法可以做到这一点吗?
发布于 2017-08-28 05:29:58
有一个名为SOUNDEX的MYSQL字符串函数。这是一个很长的范围,但可能会做你需要的。对于发音相同的两个文本字符串,SOUNDEX应该返回相同的“代码字符串”。请参阅this link for more about SOUNDEX
所以你可以试试这个大小
SELECT SOUNDEX(name) as sname, COUNT(*) c FROM books GROUP BY sname HAVING c > 1
使用regexp时,您需要更具体地说明您想要达到的效果,因为从询问中不清楚您是否只想删除标点符号,或者有更多的内容可供您查看是否类似。
前瞻性的方法是添加另一个列,比方说UNIFORM_NAME,并有一个单独的工具/过程来填充该列,例如在向表中添加项时。如果您计划多次运行此类查询,这将非常有用。然后,您只需对这个新列使用SQL代码,如果您发明了一种新的(更好的)方法来协调名称以进行比较,则可以基于名称和新算法更新新列,解决方案的其余部分将不需要进一步更改即可工作。
https://stackoverflow.com/questions/45909013
复制相似问题