У меня есть исходная таблица #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
ФИЛЬТРА стола довольно огромный, так РЕГИСТРИРУЙТЕСЬ там выполняет двойная задача - она ограничивает ФИЛЬТР в меньшее подмножество по идентификатору, а затем, когда ФИЛЬТР фильтруется его собственным WHERE условие ограничивает выходной результат. По мере увеличения количества циклов результат уменьшается, потому что #TEMP_TABLE увеличивается.
Требование после того, как цикл имеет конечный результат в оригинале #TEMP_TABLE.
Есть ли лучший, более оптимальный, оптимизированный способ сделать это?
Oook ... Будут ли downvoters просьба прокомментировать причину downvotes? Это «что ты пробовал?» или «не вопрос программирования» или «оффтопик». Пожалуйста, укажите, –