Sql server 将筛选表的结果插入到原始表中
我有一个原始表Sql server 将筛选表的结果插入到原始表中,sql-server,tsql,Sql Server,Tsql,我有一个原始表#TEMP_table,其中包含一个整数索引字段ID,我需要将其连接到相关字段ID_R上的另一个表filter,然后根据某些条件进行过滤。这些条件在WHILE循环中提供。在循环结束时,我需要将过滤后的结果返回到原始的#TEMP_表中 所以现在我在做类似的事情 WHILE [loop condition] BEGIN SELECT #TEMP_TABLE.ID INTO #TMP_FILTERED_TABLE FROM #TEMP_TABLE INNER JOIN FIL
#TEMP_table
,其中包含一个整数索引字段ID
,我需要将其连接到相关字段ID_R
上的另一个表filter
,然后根据某些条件进行过滤。这些条件在WHILE
循环中提供。在循环结束时,我需要将过滤后的结果返回到原始的#TEMP_表中
所以现在我在做类似的事情
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 there执行双重任务—它通过ID将筛选器限制为较小的子集,然后当筛选器通过其自身的WHERE子句进行筛选时,将限制输出结果。随着循环的进行,结果会变小,因为#TEMP#u表会变小
该要求是在循环在原始#TEMP#u表中具有最终结果之后
有没有更好、更优化、更优化的方法来实现这一点?不使用过滤表,您能不能不使用
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])
哦。。。请下行选民评论下行投票的原因好吗?是“你尝试了什么?”还是“不是编程问题”或“因为主题无关”。请详细说明,谢谢!我正在考虑删除,但无法确定正确的查询,而这一个看起来可以做到,我将尝试一下。还有一种便宜的方法可以在删除后检查#TEMP#u表是否没有更多记录?使用原始插入时,我可以只检查@@ROWCOUNT-并退出循环。@YuriyGalanter如果计数(*)太贵,您可以尝试将
select exists
或select top 1
插入变量并检查它是否为null(在选择之前将其重置为null)