我想我在这里失去了我的想法。我尝试更新Table1
的特定子集。假设SELECT
从Table1
返回100万行。对于这些行中的每一行,我想交叉应用Table2
的特定计算总和。SQL - 交叉应用不能正常工作
我知道Table1
中的所有行都不能与Table2
一起加入CROSS APPLY
部分中的条件。
更新仍然表示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 ... – Shaneis
微软对你的头衔不会感觉不错。 :P – Sankar