我正在使用 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 服务器自己优化它?