SQL - 交叉应用无法正常工作

SQL - CROSS APPLY not working properly

我想我在这里失去了理智。我尝试更新 Table1 的特定子集。假设 SELECT 来自 Table1 return 的 100 万行。对于这些行中的每一行,我想交叉应用 Table2 中的特定计算总和。

我知道并非 Table1 中的所有行都可以根据 CROSS APPLY 部分中的条件连接到 Table2

更新仍然说 1,000,000 行受到影响。在此之后我开始怀疑并向 CROSS APPLY 添加了 '1 = 0' 条件,因此它永远不会 return 一行。

但它仍然会更新 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

有谁知道为什么会这样?

第二个查询不是空集 - 它 returns 一个与结果连接的值 NULL。

UPDATE T1
SET T1.Field1 = T2.SumField
FROM
       (
        SELECT *
        FROM Table1
        WHERE ....
    ) T1
CROSS APPLY
    (
        SELECT Field1 SumField
        FROM Table2
        WHERE [A lot of Fields] = [Some Values from T1]
        AND 1 = 0 -- !!!
    ) T2

您将有 0 行受到影响(注意缺少 SUM)