2012-11-29 3 views
3

기본적으로 한 테이블의 열 값을 다른 테이블의 다른 열로 복사합니다.null이 아닌 경우 다른 테이블의 데이터로 테이블을 업데이트 하시겠습니까?

내가 사용하고 쿼리는 다음과 같습니다 잘 작동하지만, 열에서 불일치가 있습니다

UPDATE t1 
SET product_code = 
(SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10); 

그래서 난에 업데이트를 할 만하는 절에 추가해야합니다 서브 쿼리가 null를 돌려주지 않는 경우, 그 행.

어떻게하면됩니까?

답변

5

당신은 단지 내부로이 경우 널 (null)에 대해 걱정할 필요가 없습니다이

UPDATE 
t1 INNER JOIN t2 ON t1.variant_id = t2.variant_id 
SET t1.product_code = t2.value 
WHERE t2.key_id = 10 
AND t2.value IS NOT NULL 

같은 참여를 통해 업데이트를하고있는 것으로한다 join은 두 테이블에 variant_id가있는 행만 선택합니다.

+0

사실 그 질문에 대답하지 않습니다 : join이 발생하더라도''value'' 열에 null이 있으면 어떨까요? – Bohemian

+0

@Bohemian't2.value'가'null'과 같으면 여전히 갱신을 할 것입니다. 필자는 원래 OP에서 테이블 사이에 일치하는 레코드가 있는지 확인하려고했으나 'value'가 'null'인 경우는 제거하지 않았습니다. 그것은 내가 지금 만들었던'WHERE' 절을 아주 간단하게 추가 한 것입니다. 필자의 주된 의도는 조인에서 사용되는 열이 인덱싱된다고 가정 할 때 일반적으로 조인을 통해 업데이트를 수행하는 것이 더 효율적 일 것임을 나타내는 것입니다. –

+0

+1 확인. 이제 작동합니다. 완전성 문제 만 :) – Bohemian

4

쿼리가 null 반환하는 경우 이전 값을 사용하여 (어떤 식 으로든에서 "갱신"으로 영향을받는 행의 수 또는 하나를 계산하지 않습니다 이전 값을 사용하여 MySQL의에서, 참고

UPDATE t1 
SET product_code = 
ifnull(
    (SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10), 
    product_code); 

을 기록 된 변경)

+0

내가 질문을 한 후에도 연구를 계속 했으므로 사실이 작업을 실제로 끝내지 만 하위 쿼리보다 항상 조인을 선호하므로 아래 답변을 수락했습니다. – Hailwood

관련 문제