在一个典型的存储过程中,我正在使用如下相同的查询进行各种检查。
SELECT ... FROM Projects WHERE ProjectId IN (SELECT ProjectId FROM Tasks)
我想(SELECT ProjectId FROM Tasks)
用 a替换查询,但对它必须是variable
什么感到困惑。你知道吗?缓存这个结果也是有害的,或者有更简单的方法来做到这一点。 datatype
在一个典型的存储过程中,我正在使用如下相同的查询进行各种检查。
SELECT ... FROM Projects WHERE ProjectId IN (SELECT ProjectId FROM Tasks)
我想(SELECT ProjectId FROM Tasks)
用 a替换查询,但对它必须是variable
什么感到困惑。你知道吗?缓存这个结果也是有害的,或者有更简单的方法来做到这一点。 datatype
这种形式更可取(尽管优化器应该执行这种优化):
SELECT ... FROM Projects p
INNER JOIN Tasks t ON t.ProjectID = p.ProjectId
然后将条件添加为 WHERE 子句(而不是执行内部选择并尝试将 ProjectId 的列表放入变量中):
SELECT ... FROM Projects p
INNER JOIN Tasks t ON t.ProjectID = p.ProjectId
WHERE someCondtionOnTasksTable
您可以创建表类型变量并多次使用它,如下所示:
CREATE @Projects TABLE(Id INT NOT NULL)
INSERT @Projects SELECT ProjectId FROM Tasks
SELECT ... FROM Projects WHERE ProjectId IN (SELECT ProjectId FROM @Projects)
SELECT ... FROM Projects WHERE ProjectId NOT IN (SELECT ProjectId FROM @Projects)
虽然 - 它不是用变量替换查询,它使子查询结果更可重用
但
在某些情况下,这可能会降低您的查询性能