我正在使用此查询来计算表“books”中的所有行,其中“name”列值重复:
SELECT name, COUNT(*) c FROM books GROUP BY name HAVING c > 1
问题是,我想将非常相似的书名视为“重复”。例如,名为“好书”和“好书”的书。将被视为相同。我或多或少知道如何使用 REGEXP 和通配符,但我不知道如何将其合并到我正在使用的查询中(如果可能的话......)。
有什么办法可以实现这一点吗?
最佳答案
MYSQL 有一个名为 SOUNDEX
的字符串函数。这是一个很长的距离,但可能只是做你需要的。 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 代码,如果您发明了一种新的(更好的)方法来协调比较名称,您可以根据名称和新算法更新该新列,并且您的解决方案的其余部分将起作用无需进一步更改。
关于mysql - 如何计算 MYSQL 中具有重复值的行数,同时考虑 REGEXP 或通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909013/