Временная таблица SQL-сервера с соединениями внутри другого выбора

У меня есть следующая структура:

Create @temp
Select ...inser...into @temp where ...

(select ... from @temp
Join tblA where ... )
UNION
(Select ... from @temp
join tblB where ... )

После сборки вышеприведенной таблицы мне нужно иметь возможность выполнять WHERE, JOINS,...

Что-то типа:

Select ... from (above statement)
join ....
where....

Я не знаю, может ли @temp,joins, union... быть внутри другого выбора.

ИЛИ единственное, что я могу сделать, это создать вставку @Temp2 с результатом первого оператора, а затем работать с другим соединением, где...?

ОБНОВЛЕНИЕ 1:

Я также пытаюсь:

With cte (query returned columns)
as
(same query I was using to build my @temp as before)

(select ... from cte
join tblA
where...)
UNION
(select ... from cte
join tblB
where...)

Но я застрял в том же месте, как выполнять другие соединения, где... с общим результатом выше


person Flib    schedule 15.05.2015    source источник
comment
Похоже, вы продумываете это процедурно (сначала я получу этот набор ответов, потом еще немного поработаю над ними, потом еще поработаю над этим результатом). Это не приводит к лучшим результатам. Что вам нужно сделать, так это написать один запрос, который выражает то, что вы хотите, а затем позволить server работать над нашим как это сделать. Один из способов несколько разбить запрос, но сохранить его как один запрос, — использовать Общие табличные выражения. Я бы рекомендовал тем, кто использует временные таблицы.   -  person Damien_The_Unbeliever    schedule 15.05.2015
comment
tnks, я пытаюсь использовать cte, но вижу мой вопрос update1   -  person Flib    schedule 15.05.2015
comment
Итак, теперь вы создаете второй CTE, содержащий UNION, а затем просто используете этот CTE в своем запросе и выполняете соединения с ним.   -  person Damien_The_Unbeliever    schedule 15.05.2015


Ответы (1)


На самом деле вы можете сделать это без временной таблицы:

WITH myCTE [ ( column_name [,...n] ) ]
AS
( here you define your query )

и после этого вы просто делаете свой выбор, но используете CTE

Select ... from myCTE
join ....
where....

о CTE вы можете прочитать здесь После обновления

Select fields from myCTE join table1
Union
Select fields from myCTE join table2

Без скобок в вашем запросе

person The Reason    schedule 15.05.2015
comment
Пожалуйста, посмотрите мое обновление1 по вопросу. Я смог вернуться так же, как с помощью @temp, но застрял в той же точке - person Flib; 15.05.2015
comment
теперь мне удалось это сделать. удалил скобки и включил мой новый выбор между определением cte и объединением. Итак: с помощью cte as выберите ..from (выберите объединение, выберите объединение) как Tba, где tba. ххх = ..... . Спасибо - person Flib; 15.05.2015