【发布时间】:2017-04-26 14:10:31
【问题描述】:
我想我在这里疯了。我尝试更新Table1 的特定子集。假设来自Table1 的SELECT 返回100 万行。对于这些行中的每一行,我想交叉应用来自Table2 的特定计算总和。
我知道并非Table1 中的所有行都可以使用CROSS APPLY 部分中的条件连接到Table2。
更新仍然显示 1,000,000 行受到影响。在此之后,我开始怀疑并将“1 = 0”条件添加到CROSS APPLY,因此它永远不会返回一行。
但它仍然会更新Table1 中的所有行?
UPDATE T1
SET T1.Field1 = T2.SumField
FROM
(
SELECT *
FROM Table1
WHERE ....
) T1
CROSS APPLY
(
SELECT SUM(Field1) SumField
FROM Table2
WHERE [A lot of Fields] = [Some Values from T1]
AND 1 = 0 -- !!!
) T2
有人知道为什么会这样吗?
【问题讨论】:
-
我不知道你为什么要使用
CROSS APPLY,这里的INNER或LEFT JOIN有什么问题?我想说你所有的WHERE 1 =0所做的只是返回一个 NULL ... -
微软不会对你的标题感到满意。 :P
标签: sql sql-server cross-apply