我有一个原始表#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中得到最终结果之后。
是否有更好,更优化,更优化的方法来实现这一目标?
答案 0 :(得分:0)
您可以不使用
,而不是使用Filtered_table delete t
from #temp_table t
INNER JOIN FILTER ON t.ID = FILTER.ID_R
WHERE NOT (FILTER.FIELD1 = [parameter1 from loop]
AND FILTER.FIELD2 = [parameter2 from loop])