2009-11-19 3 views
0

다음 Microsoft SQL Server 2008 명령을 작성하는 좀 더 우아한 방법이 있습니까?다른 테이블의 값을 기반으로 업데이트 필드

UPDATE TableB 
SET TableBField2=0 
WHERE TableBID IN(
    SELECT TableBID 
    FROM TableB 
    JOIN TableA on TableB.TableAID=TableA.TableAID 
    WHERE TableBField2 < 0 
    AND TableAField1 = 0 
) 

일반적으로 말하면, 내가하고있는 일은 조인 된 테이블의 필드 값을 기반으로 테이블을 업데이트하는 것입니다. IN()의 사용이 비효율적이라고 생각하는지 궁금합니다.

+0

뭔가를 시도 할 수 있습니다? 이제 TableA 또는 TableB를 누를 때마다이 업데이트를 실행해야합니다. 계산 된 결과가 변경되어 TableBField2가 유효 기간을 초과 할 수 있기 때문입니다. –

답변

1

이 더 효율적이어야한다 : 당신이 다른 시스템에 사실에서이 데이터를 확인할 수있는 경우

UPDATE TableB b 
SET TableBField2=0 
WHERE exists (
    SELECT 1 
    FROM TableA 
    WHERE b.TableAID=TableA.TableAID 
    AND b.TableBField2 < 0 
    AND TableAField1 = 0 
) 
+0

존재하기 전에 어디에 b.TableBField2 <0을 넣을까요? –

1

당신은 왜 두 번 저장이

UPDATE TableB 
SET Field2 = 0 
FROM TableB b INNER JOIN 
     TableA a ON b.TableB.TableAID=a.TableAID 
WHERE b.Field2 < 0  
AND a.Field1 = 0 
관련 문제