在我的数据库中我有一个带有品牌名称的表,我需要清理它 因为我有一些像
这样的重复Yadda
Yadda&公司
Yadda Engineering
这是相同的品牌,但多次错误输入,尽管该列是唯一的
如何处理这个问题?这可以只在mysql查询中完成吗?
感谢
答案 0 :(得分:1)
我的优惠首先为搜索列创建FullText索引。 使用全文分数后,您可以确定字符串的相似性。 删除它们,除非它们得分更高且比门槛更高。
DELETE FROM table_name
WHERE
id <> (SELECT id FROM table_name ORDER BY MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) DESC LIMIT 0,1) AND
MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) < threshold
另外,在Fulltext中你可以使用levenshtein
函数来解决这个问题(使用相同的逻辑sql查询)
how to compute similarity between two strings in MYSQL
答案 1 :(得分:0)
您可以使用substr
假设您的所有行都以&#39; Yadda&#39;你可以
select * from my_table
where substr(my_column, 1, length('Yadda')) = 'Yadda');
然后,如果您需要删除不正确的行(假设您想要保存行,那么Yadda&amp; Co&#39;您可以
delete from my_table
where substr(substr(my_column, 1, length('Yadda')) = 'Yadda')
and my_column <> 'Yadda & Co';
或美国人
delete from my_table
where substr(substr(my_column, 1, length('American')) = 'American')
and my_column not in ('American Standard', 'American Airlines');
答案 2 :(得分:0)
..WHERE distance < MAX_ALLOWABLE_DISTANCE...
在此REGEXP中代表正则表达式
和
这适用于T-SQL
SELECT Name FROM Table WHERE Name REGEXP '^[Y].*$'