2012-06-22 3 views
0

my mysql 테이블에 cityname 열이 있습니다. cityname 열의 값에 일부 맞춤법 오류가 있습니다. 도시의 맞춤법 오류 각각을 수정해야합니다. 다른 테이블에는 모든 올바른 도시 이름이 포함 된 열이 있습니다. 이 표에 따라 첫 번째 표의 맞춤법 오류를 수정해야합니다. 나는 soundex와 같은 것을 조사했지만 비슷한 것을 한 어떤 링크도 찾을 수 없었다.mysql의 다른 테이블을 기반으로 한 열의 맞춤법 오류를 수정했습니다.

TableA 

+----+------------+----------+ 
| id | col1  | city_name | 
+----+------------+----------+ 


TableB 

+----+------------+-- 
| index |City_name  | 
+----+------------+-- 

내가 마음에 데 접근 방식은 비슷한 소리가 나는 도시의 이름이 행에서 별도의 테이블을 생성하는 SQL 쿼리를 받고있다.

이이 올바른 사람이 다시 SQL 쿼리를

를 사용하여 마지막으로 모든 수정 철자 하나 개의 테이블에 모든 다른 테이블을 결합하여 잘못된 철자를 교체 완료되면. 그것은 문제가되지 않을 수도 있습니다이는 한 번이면

내가 두 접근 방식뿐만 아니라 MySQL의 쿼리 구문에 대한 조언을 찾고은

+0

SoundEx가 아닌 Levenstein 거리를 고려할 수 있습니다. http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance – spencer7593

+0

Levenshtein 거리를 검색하십시오. 이 알고리즘은 맞춤법 오류를 처리하기 위해 1960 년대에 개발 된 알고리즘입니다. 이 게시는 http://stackoverflow.com/questions/560709/levenshtein-distance-in-t-sql에 도움이 될 수 있습니다. –

+0

[이것은 또 다른 좋은 질문입니다] (http://stackoverflow.com/questions/42013/levenshtein-distance-based-methods-vs-soundex) soundex 대신 Levenshtein 거리를 사용하십시오. –

답변

3

이 일부 수동 작업을 포함 할 것, 그리고 프런트 엔드를 구축하고있다 맡은 일.

  1. 모든 철자 오류의 목록을 생성합니다

    는 내가 뭘 할 것은 다음과 같다.

  2. soundex를 기반으로 제안 사항을 생성하십시오.
  3. 목록을 수동으로 수동으로 선택하고 수동으로 수정 문을 실행하십시오.

그래서,이 작업을 수행하는 방법 :

SELECT * FROM TableA as orig 
LEFT OUTER JOIN 
TableB as correct 
ON SOUNDEX(orig.city_name) = SOUNDEX(correct.city_name) 
WHERE orig.City_name NOT IN (SELECT City_name FROM TableB) 

을 손으로 업데이트 문을 작성. soundex를 통해 제안을 얻지 못할 수도 있고 여러 가지 선택을 할 수도 있습니다. 이러한 선택은 스스로 해결해야 할 것입니다. 컴퓨터는 그렇게 똑똑하지 않습니다.

+0

있다 LEFT OUTER은 (tableA.city_name) SOUNDEX ON TableB의 가입 = 사운 덱스는 (tableB.city_name는) tableA.City_name NOT IN은 ( TableB의 FROM CITY_NAME 를 선택) – silverkid

+0

하위 쿼리 확인에 오류 알 수없는 열 tableA.city_name를 gettting 우편 번호 및 상태 – silverkid

+0

감사합니다, 나는 그것을 간과 WHERE. 별명을 사용하기 위해 편집에서 약간 다르게 수정했습니다. 문제는 별칭 IMO에서 더 명확 해지는 경향이 있지만, 다시 한번, 당신의 테이블은'TableA' 및'TableB'로 불리지 않습니다. (또는 적어도 나는 희망하지 않습니다!) – Martijn