根据另一个表的值更新字段

时间:2009-11-19 16:39:04

标签: sql-server-2005

是否有更优雅的方式来编写以下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()的使用是否被认为效率低下。

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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