2013-12-12 2 views
0

테이블을 업데이트해야합니다. 863 개의 다른 계정에 대해 업데이트해야합니다.큰 선택 쿼리의 테이블 업데이트

다음은 변경해야하는 계정 번호를 임시 테이블에 반환하는 쿼리 블록입니다.

이 쿼리에서 대량 업데이트를 수행하는 쉬운 방법이 있습니까?

declare @tmp table (number int) 

insert into @tmp 
select accountid as number from letterrequest 
where lettercode in ('97001','70003','19998','91009','20000','99100','19997','70002','99099','91008','97002','97210','97231') 
and dateProcessed >= '2013-12-04' 
union all 
select number from gizmo_requests 
where letterCode in (97001,70003,19998,91009,20000,99100,19997,70002,99099,91008,97002,97210,97231) 
and dateProcessed >= '2013-12-04' 
union all 
select number from jm_efiling 
where letter in (97001,70003,19998,91009,20000,99100,19997,70002,99099,91008,97002,97210,97231) 
and datePrinted >= '2013-12-04' 

select distinct * from @tmp 

이 쿼리는 863 개의 계정 ID 행을 반환합니다.

update extradata set line4 = 'TEST' 
where extracode = 'L3' 
and number in @tmp 

숫자 열이 위의 임시 테이블에있는 경우에만. where 문에서 하위 쿼리와

+0

내부가 @tmp하는 extracode의 조인 쿼리? –

+0

"쉬운"이란 무엇을 의미합니까? 더 빠르고 더 좋은 코드? – Shiva

+0

@shiva 쉬운 방법으로 tmp 테이블에서 863을 쉽게 업데이트 할 수 있습니다. 내가 그것을 할 수있는 유일한 방법은 while 루프를 설정하여 고통이다. –

답변

3

시도 : 갱신에

update extradata set line4 = 'TEST' 
from extradata inner join @tmp T 
on extradata.number = T.number 
where extracode = 'L3' 

당신이 사용할 수있는 조인

+0

@tmp와 다른 값을 가진 사람이라면 누구입니까? 어떤 이유에서 나는 inner를 두 테이블에 조인 할 때 865 개의 결과를 반환합니다. 하지만 별개의 내부 테이블을 선택하면 863이 반환됩니다. 왜 별개의 버전이 두 개의 추가 행을 반환하는지 확신 할 수 없습니다. –

+1

아마도'extradata' 테이블에 같은 수의 레코드가 있습니다. –

1

사용 in :

update extradata 
    set line4 = 'TEST' 
    where extracode = 'L3' and 
      number in (select number from @tmp); 
관련 문제