2009-11-19 70 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 
相关问题