【发布时间】:2012-08-05 16:30:20
【问题描述】:
我正在使用 Microsoft SQL Server 2008 我想保存子查询的结果以在以下子查询中重用它。 这可能吗? 这样做的最佳做法是什么? (我对 SQL 很陌生)
我的查询如下:
INSERT INTO [dbo].[TestTable]
(
[a]
,[b]
)
SELECT
(
SELECT TOP 1 MAT_WS_ID
FROM #TempTableX AS X_ALIAS
WHERE OUTERBASETABLE.LT_ALL_MATERIAL = X_ALIAS.MAT_RM_NAME
)
,(
SELECT TOP 1 MAT_WS_NAME
FROM #TempTableY AS Y_ALIAS
WHERE Y_ALIAS.MAT_WS_ID = MAT_WS_ID
--(
--SELECT TOP 1 MAT_WS_ID
--FROM #TempTableX AS X_ALIAS
--WHERE OUTERBASETABLE.LT_ALL_MATERIAL = X_ALIAS.MAT_RM_NAME
--)
)
FROM [dbo].[LASERTECHNO] AS OUTERBASETABLE
我的问题是:
我所做的是否正确。 我用 [a] (=MAT_WS_ID) 的第一个 SELECT 语句的结果替换了 [b] 的 WHERE 子句中的第二个 SELECT 语句(已被注释掉并且与 [a] 完全相同)。 它似乎给出了正确的结果。 但我不明白为什么!
我的意思是 MAT_WS_ID 是临时表 X_ALIAS 和 Y_ALIAS 的一部分。 所以在 [b] 的 SELECT 语句中,在 [b]-select-query 的范围内,MAT_WS_ID 只能从 Y_ALIAS 表中获知。 (或者我错了,我更多的是 C++,可能 SQL 和 C++ 中的作用域完全不同)
我只是想知道在 SQL Server 中重用标量选择结果的最佳方式是什么。 还是我应该不关心并复制每一列的选择,然后 sql 服务器自己优化它?
【问题讨论】:
-
您应该始终加入表并删除内部选择以获得更好的性能
标签: sql sql-server