0

我有一个#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 中获得最终结果之后。

有没有更好、更优化、优化的方法来做到这一点?

4

1 回答 1

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])
于 2013-08-22T08:46:02.730 回答