2009-11-19 47 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可能會過時。 – 2009-11-19 16:55:17

回答

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

我想我會把存在之前的WHERE b.TableBField2 <0 – 2009-11-19 18:38:10

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 
相關問題