首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于删除连字符重复项的MySQL查询

用于删除连字符重复项的MySQL查询
EN

Stack Overflow用户
提问于 2017-05-10 15:43:46
回答 2查看 49关注 0票数 0

我在Coursera上上了杜克的MySQL课程。在第二周,有关于混乱数据的引用,我想我应该在这里提出我的问题。我的问题的范围是如何比较表行中已经与实例匹配的条目,除非它是用连字符输入的,即“金毛猎犬混合”与“金毛猎犬混合”是相同的实例。当我运行不同的SELECT语句时,我不希望它同时提取两个结果。问题是,我们不能只是删除列字段中的所有连字符,因为我们仍然需要它们作为"Golden -Airedale Terrier Mix“的条目。查询是如何做到这一点的。下面是同时引入“金毛猎犬混合”和“金毛猎犬-混合”的示例代码。

代码语言:javascript
复制
SELECT DISTINCT breed,
TRIM(LEADING '-' FROM breed)
FROM dogs
ORDER BY (LEADING '-' FROM breed) LIMIT 1000, 1000;

我在想,我需要一个IF/THEN语句,上面写着IF(REPLACE(breed,'-','') = breed) THEN DELETE breed;

很明显,这不是正确的语法,这正是我要找的。

EN

回答 2

Stack Overflow用户

发布于 2017-05-10 15:47:41

现在已经差不多了,您需要做的就是去掉select子句中的普通breed列,并用REPLACE()更改TRIM()

代码语言:javascript
复制
SELECT  DISTINCT REPLACE(breed, '-', ' ')
FROM    dogs

TRIM(LEADING...)将删除字符串开头的连字符,但您希望显示的是将连字符视为空格的breed的不同值。

编辑

我假设这两个字符串是“金毛猎犬混合”和“金毛猎犬-混合”,但是如果连字符后面实际上有一个空格(“金毛猎犬-混合”),你可以用REPLACE(breed, '-', '')代替。

编辑2

在您的评论中澄清之后,我认为您需要的是一个GROUP BY子句

代码语言:javascript
复制
SELECT  MIN(breed)
FROM    dogs
GROUP BY REPLACE(breed, '-', ' ')

任何带有下划线的字符串都将被认为比带有空格的相同字符串的值更高,因此当两者都存在时,此查询将返回带有空格的字符串。如果只有一个,它将按原样返回

票数 0
EN

Stack Overflow用户

发布于 2017-05-10 15:55:54

我认为您正在寻找的是Levenshtein距离(https://en.wikipedia.org/wiki/Levenshtein_distance)。这个计算词之间的差异,例如,"Test“和"Test1”的比较结果为1,因为多了一个字母。您可以使用How to add levenshtein function in mysql?Levenshtein: MySQL + PHP中建议的过程

这不仅会显示所有前导为"-“的条目,甚至还会显示拼写错误的条目。然后,您可以根据计算出的距离过滤结果数据。

如果您因为性能问题而不想要这个字符串,您仍然可以使用TRIMREPLACE来过滤您的符号,并将其与其他字符串进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43886365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档