将过滤后的表的结果插回到原始表中

时间:2013-08-22 02:17:04

标签: sql-server tsql

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

是否有更好,更优化,更优化的方法来实现这一目标?

1 个答案:

答案 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])