这是因为在第一种情况下,对于 Invoices 中的每个值(存在ID 为 34的供应商),WHERE 子句都被评估为 true,因此当 ID=-34 时,每条记录都会更新,反之亦然——没有记录更新,因为 VendorID= -34 总是错误的。
例如,假设我们设置了 InvoicesI {... does not matter ... }
和 Vendors V.VendorIDs {1 .. 35}
。
set PaymentTotal = 1 when VendorID=34 exists
-- 34 exists so this is executed
set PaymentTotal = 1 when VendorID=-34 exists
-- -34 does not exists so this is never executed
这些是不相关集合之间的集合操作,因此不会出现预期结果(不经过此类分析)。
如果你要将它们关联起来(如下面的查询),那么这个逻辑就会改变,你会得到“预期的”结果。
我相信你想要这些方面的东西:
UPDATE Invoices
SET PaymentTotal = 1
FROM Vendors
WHERE Vendors.VendorID = 34 and Invoices.VendorID = Vendors.VendorID
...而且我假设您实际上并不知道 VendorID,而是知道另一个 Vendor 字段,这样该查询才有意义(因为如果您已经知道 ID,则查询另一个表是没有用的)。