복붙노트

[SQL] 서로 값을 하나 개의 MySQL의 테이블을 업데이트

SQL

서로 값을 하나 개의 MySQL의 테이블을 업데이트

나는 다른 정보를 기반으로 한 MySQL의 테이블을 업데이트하기 위해 노력하고있어.

내 원래 표는 다음과 같습니다

id | value
------------
1  | hello
2  | fortune
3  | my
4  | old
5  | friend

그리고 tobeupdated 테이블 외모가 좋아 :

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        |    | old
4        |    | friend
5        |    | fortune

내가 값을 기준으로 원래의 ID로 tobeupdated의 ID를 업데이트 할 (문자열은 VARCHAR (32) 필드에 저장).

업데이트 된 표는 희망처럼 보일 것입니다 :

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        | 4  | old
4        | 5  | friend
5        | 2  | fortune

나는 쿼리 그 작품을 가지고 있지만 매우 느린 :

UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value

수행 된 업데이트의 일부분으로 제한 시간이 내 CPU 밖으로 maxes 결국 리드 (일치하는 수천 값이있는). 나는 느려집니다 값으로 일치 알고 있지만, 내가 함께 일치 할 필요가있는 유일한 데이터입니다.

이 같은 값을 업데이트하는 더 좋은 방법이 있나요? 즉 빠른 것이 있을지, 병합 된 결과에 대한 세 번째 테이블을 만들 수 있을까?

내가 다른 테이블의 값으로 테이블을 업데이트 할 수 있습니까?하지만 도움이 정말하지 않았다 - 나는 MySQL을 시도했다. 어떤 아이디어?

MySQL의 초보자 도움에 미리 감사드립니다!

해결법

  1. ==============================

    1.

    UPDATE tobeupdated
    INNER JOIN original ON (tobeupdated.value = original.value)
    SET tobeupdated.id = original.id
    

    그게 무엇을해야하고, 정말 그는 당신이 정확하게 일을. 그러나, 나는 좋아 '가입하기'에 대한 구문은 'WHERE'조건, 나는 쉽게 읽을의 생각에 여러보다는 조인

    느리게 실행에 관해서는, 얼마나 큰 테이블은? 당신은 tobeupdated.value 및 original.value에 인덱스를 가져야한다

    편집하다: 우리는 또한 쿼리를 단순화 할 수 있습니다

    UPDATE tobeupdated
    INNER JOIN original USING (value)
    SET tobeupdated.id = original.id
    

    사용되는 속기 (A)의 두 테이블은 동일한 ID로는 키가 참여하면라는. IE의 동등을 조인 - http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join

  2. ==============================

    2.그것은 해당 테이블의 사용 무엇 달려있다,하지만 당신은 삽입 및 업데이트에 원래 테이블에 트리거를 가하고 고려할 수 있습니다. 삽입 또는 업데이트가 완료되면, 원래의 테이블에서 하나의 항목에 기초하여 제 2 테이블을 업데이트합니다. 그것은 빨리 될 것입니다.

    그것은 해당 테이블의 사용 무엇 달려있다,하지만 당신은 삽입 및 업데이트에 원래 테이블에 트리거를 가하고 고려할 수 있습니다. 삽입 또는 업데이트가 완료되면, 원래의 테이블에서 하나의 항목에 기초하여 제 2 테이블을 업데이트합니다. 그것은 빨리 될 것입니다.

  3. from https://stackoverflow.com/questions/5727827/update-one-mysql-table-with-values-from-another by cc-by-sa and MIT license