Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中更正不同拼写的列的最佳方法_Mysql_Sql_Database - Fatal编程技术网

在mysql中更正不同拼写的列的最佳方法

在mysql中更正不同拼写的列的最佳方法,mysql,sql,database,Mysql,Sql,Database,我有一个表,其中的列包含有拼写错误的数据。 比如: 苹果,苹果,苹果 芭娜,香蕉,芭娜 猫 我想将所有拼写错误更正为单个正确的拼写错误。有数千行。 如果我不必手动更新每个拼写错误,那么纠正此问题的最佳方法是什么? 我已经为正确的状态添加了正确的“Y”。这里有一个想法,使用SOUNDEX。SOUNDEX确实是一个糟糕的功能,当然也不是灵丹妙药,但它可能会将包含数千个错误的数据集减少为包含数百个错误的数据集 对于其余的,我们可以看看Levenshtein距离之类的东西,但最终,在某种程度上,您将需要

我有一个表,其中的列包含有拼写错误的数据。 比如: 苹果,苹果,苹果 芭娜,香蕉,芭娜 猫

我想将所有拼写错误更正为单个正确的拼写错误。有数千行。 如果我不必手动更新每个拼写错误,那么纠正此问题的最佳方法是什么?
我已经为正确的状态添加了正确的“Y”。

这里有一个想法,使用SOUNDEX。SOUNDEX确实是一个糟糕的功能,当然也不是灵丹妙药,但它可能会将包含数千个错误的数据集减少为包含数百个错误的数据集

对于其余的,我们可以看看Levenshtein距离之类的东西,但最终,在某种程度上,您将需要手动方法

DROP TABLE IF EXISTS bad_data;

CREATE TABLE bad_data
(id SERIAL PRIMARY KEY
,string VARCHAR(12) NOT NULL
);

INSERT INTO bad_data (string) VALUES
('apple'), 
('appl'), 
('aple'),
('bana'),
('banana'), 
('banna'),
('cat'),
('cot'), 
('cta');

DROP TABLE IF EXISTS good_data;

CREATE TABLE good_data
(id SERIAL PRIMARY KEY
,string VARCHAR(12) NOT NULL UNIQUE
);

INSERT INTO good_data(string) VALUES
('apple'), 
('banana'), 
('cat');

SELECT * 
  FROM bad_data x 
  JOIN good_data y ON SOUNDEX(x.string) = SOUNDEX(y.string);
+----+--------+------+--------+
| id | string | id   | string |
+----+--------+------+--------+
|  1 | apple  |    1 | apple  |
|  2 | appl   |    1 | apple  |
|  3 | aple   |    1 | apple  |
|  4 | bana   |    2 | banana |
|  5 | banana |    2 | banana |
|  6 | banna  |    2 | banana |
|  7 | cat    |    3 | cat    |
|  8 | cot    |    3 | cat    |
|  9 | cta    |    3 | cat    |
+----+--------+------+--------+

指定您正在使用的DBMS。@ErgiNushi mysqlI将创建一个包含两列的表,其中两列已知为“不正确”和“正确”,并使用它来更新您的数据。我将按字母顺序对它们进行排序。实际查看id,其中第一个拼写错误是最后一个拼写错误。然后更新开始id和结束id之间的所有错误。然后转到下一个错误我们如何知道“aple”的错误是“apple”,而不是“maple”?