하나의 MySQL 테이블을 다른 값으로 업데이트
다른 정보를 기반으로 한 MySQL 테이블을 업데이트하려고합니다.
내 original
테이블은 다음과 같습니다.
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
에서 original
를 기반으로 value
(에 저장된 문자열 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를 최대로 사용하고 결국 수행 된 업데이트의 일부만으로 시간 초과로 이어집니다 (일치 할 값이 수천 개 있음). 에 의한 매칭 value
이 느릴 것이라는 것을 알고 있지만 이것이 내가 함께 매칭해야하는 유일한 데이터입니다.
이와 같은 값을 업데이트하는 더 좋은 방법이 있습니까? 더 빠를 경우 병합 된 결과에 대한 세 번째 테이블을 만들 수 있습니까?
MySQL을 사용해 보았습니다 -다른 테이블의 값으로 테이블을 어떻게 업데이트 할 수 있습니까? ,하지만 실제로 도움이되지 않았습니다. 어떤 아이디어?
MySQL 초보자를 도와 주셔서 미리 감사드립니다!
UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
그것은 그것을해야하며 실제로 당신의 일을 정확히 수행합니다. 그러나 여러 개의 'WHERE'조건보다 조인에 'JOIN'구문을 선호하므로 읽기가 더 쉽다고 생각합니다.
느리게 달리는 경우 테이블은 얼마나 큽니까? 당신은에 인덱스를 가지고 있어야 tobeupdated.value
하고original.value
편집 : 쿼리를 단순화 할 수도 있습니다.
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
USING
(A)의 약칭이며 모두 표라는 동일가 가입 할 때 key
등을 id
. 즉 equi-join- http : //en.wikipedia.org/wiki/Join_( SQL)#Equi-join
이러한 테이블의 용도에 따라 다르지만 삽입 및 업데이트시 원본 테이블에 트리거를 두는 것을 고려할 수 있습니다. 삽입 또는 업데이트가 완료되면 원본 테이블의 항목 하나만 기반으로 두 번째 테이블을 업데이트합니다. 더 빨라질 것입니다.
참고 URL : https://stackoverflow.com/questions/5727827/update-one-mysql-table-with-values-from-another
'programing tip' 카테고리의 다른 글
ngModel을 사용하는 Angular 2 양방향 바인딩이 작동하지 않습니다. (0) | 2020.09.16 |
---|---|
VueJS 구성 요소에 외부 JS 스크립트를 추가하는 방법 (0) | 2020.09.16 |
연산자 [] [] 오버로드 (0) | 2020.09.16 |
URL에서 이미지를 다운로드하는 방법 (0) | 2020.09.16 |
텍스트에 줄임표 효과를 적용하는 방법 (0) | 2020.09.15 |