我有一个#TEMP_TABLE
带有整数索引字段的原始表ID
,我需要通过将其连接到FILTER
相关字段上的另一个表来进行过滤,而相关字段ID_R
又被某些条件过滤。这些条件在WHILE
循环中提供。在循环结束时,我需要在原始#TEMP_TABLE 中返回过滤结果。
所以目前我正在做类似的事情
WHILE [loop condition]
BEGIN
SELECT #TEMP_TABLE.ID INTO #TMP_FILTERED_TABLE
FROM #TEMP_TABLE INNER JOIN FILTER ON #TEMP_TABLE.ID = FILTER.ID_R
WHERE FILTER.FIELD1 = [parameter1 from loop] AND FILTER.FIELD2 = [parameter2 from loop]
TRUNCATE TABLE #TEMP_TABLE
INSERT INTO #TEMP_TABLE (ID)
SELECT ID FROM #TMP_FILTERED_TABLE
DROP TABLE #TMP_FILTERED_TABLE
END -- END LOOP
FILTER 表非常大,因此 JOIN 执行双重任务 - 它通过 ID 将 FILTER 限制为较小的子集,然后当 FILTER 由其自己的 WHERE 子句过滤时限制输出结果。随着循环的进行,结果会变小,因为#TEMP_TABLE 会变小。
要求是在循环在原始#TEMP_TABLE 中获得最终结果之后。
有没有更好、更优化、优化的方法来做到这一点?