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)
我想我在这里失去了理智。我尝试更新 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)