2011-10-10 2 views
2

에 기반한 MySQL 업데이트 우편 번호 (우편 번호)가 포함 된 사용자 테이블이 있습니다 우편 번호를 기반으로 위도, 경도 값이있는 지역 테이블이 있습니다.우편 번호

너무 : 된 table_1의 우편 번호는이 형식은

usertable 
table_1 contains fields: zip, latitude,longitude (in last 2 fields all values are NULL) 
geotable: 
table_2 contains fields: zip, latitude,longitude 

: 1111 AA (4 개 번호, 일반적으로 빈 문자로 분할이 편지를)

table_2의 우편 번호는이 형식 : 1111 (네 개의 숫자)

업데이트 쿼리가 어떻게 나타나는지 알아 내려고하고 있습니까?

사용자 테이블을 geotable의 값으로 업데이트하여 조인없이 검색 쿼리를 수행 할 수 있습니다. 검색 쿼리는이 사이트에서 가장 많이 사용되는 쿼리입니다. 드물게 업데이트/확인합니다.

미리 도움을 청하십시오!

+1

끔찍한 DB 스키마를. 먼저 다시 디자인하십시오 : 복제 된 데이터, 결합 된 필드는 첫 번째 보통 양식 –

+0

에도 적용됩니다. 그러나 그것은 내 것이 아닙니다. usertable에서 theire는 필드 우편이며, 나는 단지 geotable을 추가했고, 같은 테이블에 geo 데이터를 추가하려고합니다. 지리 정보 테이블을 중복 된 데이터 테이블로만 가지고 있습니다. 검색 쿼리에 지리 정보를 사용하지 않는 것이 성능상의 이유입니다. – Terradon

답변

2

당신은

UPDATE table_1 SET 
    latitude = (SELECT latitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%')), 
    longitude = (SELECT longitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%')); 

불행하게도 나는 매우 유사 구문이 믿지 않는 쓸 수 콜린이 제안한 것. table_2의 값을 먼저 선택한 다음 삽입하는 것이 더 효율적일 수 있습니다.

+0

+1 나를 올바르게 작동 : http://www.sqlize.com/a57jbz3Tu6 – mellamokb

+0

[sqlize.com] (http://www.sqlize.com/) 참조 주셔서 감사합니다! 굉장히 유용하다. –

+0

이 솔루션을 사용했지만 작동하지 않는 것 같습니다 (값은 아직 테스트되지 않았지만 필드는 우회했습니다). 그러나 ..... 원래 값은 52.35993326000000000000입니다. 그러나 udated 값은 정수입니다. – Terradon

0

테스트되지 않은, 나는 구문이 꽤 괜찮이 없을 수 있지만,이 원칙입니다 :

UPDATE table_1 COLUMNS(latitude, longitude) VALUES (
    SELECT latitude, longitude FROM table_2 
     where table_1.zip LIKE CONCAT(table_2.zip, ' %')); 
1

당신은 테이블을 조인하는 UPDATE ... JOIN 절을 사용하여 업데이트를 수행 할 수 있습니다

update 
    usertable ut inner join geotable gt on 
     ut.zip like concat(gt.zip, '%') 
    set ut.latitude = gt.latitude, 
     ut.longitude = gt.longitude; 

데모 : http://www.sqlize.com/398E9CKddr

+0

'UPDATE'에서 조인을 사용할 수 있다는 것을 몰랐습니다. 이것은 확실히 좋은 대답입니다. –

+0

이것은 나를 위해 작동하지 않았고 영향을받은 행이 0 개 있습니다. "utt.zip와 같은 concat (gt.zip, '%') "ut.zip과 gt.zip의 형식이 다를 수 있습니다. 그래서 내 생각에 이러한 차이 때문에 내부 결합이 작동하지 않을 것이라고 생각하십니까? – Terradon

+0

'ut.zip like concat (gt.zip, '%') '는 두 필드가 같은 시작 문자를 포함하는 경우 일치한다는 의미입니다. 따라서'1111 AA '의'ut.zip'은'gt.'ut.zip'의 시작 문자가 모두'gt.zip'의 전체 문자열과 일치하기 때문에 조인에'1111'의'zip'을 사용합니다. 이것은 당신의 스펙이 어떻게 정의되었는지를 믿습니다. 내가 링크 된 샘플 코드를 보셨습니까? 데이터가 예제 코드와 다른 점은 무엇입니까? – mellamokb