所以我有一个子查询,它将在三个不同的表上执行LEFT JOIN
。然后,我有一个第四个表,它连接在一个id上,我之前加入的三个表中的一个将包含。
SELECT
(
IIF
(
NOT EXISTS(
SELECT * FROM A
LEFT JOIN B ON
(A.Col1 = B.Col1)
LEFT JOIN C ON
(A.Col2 = C.Col2)
LEFT JOIN D ON
(A.Col3 = D.Col3)
LEFT JOIN E ON
(B.SomeID = E.SomeID)
OR
(C.SomeID = E.SomeID)
OR
(D.SomeID = E.SomeID)
WHERE A.SomeCondition = T.SomeCondition
1,
0
) AS SomeCol
FROM T
WHERE T.Col1 = (some condition)
当我执行CROSS APPLY
时,当我限制表A中的行时,如果我执行了WHERE A.SomeCondition = T.SomeCondition
,我是否能获得良好的性能。此表将具有比其他表更多的行。
答案 0 :(得分:1)
即使表E没有匹配项,此代码也会返回数据。
而不是
LEFT JOIN E ON
(B.SomeID = E.SomeID)
OR
(C.SomeID = E.SomeID)
OR
(D.SomeID = E.SomeID)
你可以尝试:
INNER JOIN E on e.id = coalesce(B.SomeID, C.SomeID, D.SomeID)
然后开始查看查询计划并查看它为您的数据显示的内容。