一尘不染

如何从查询中删除#temp表

sql

我有三个查询,分别将数据放在各自的#temp表中。稍后,在一个查询中,再次使用那些#temp表来获取数据。

IE

select {some columns} into #temp1 from {some tables} where {conditions1}
select {some other columns} into #temp2 from {some tables} where {conditions2}
select {some other columns} into #temp3 from {some tables} where {conditions3}

select {some columns from all #temp tables} from #temp1, #temp2, #temp3 where {conditions}

我想摆脱这些#temp表,并希望在没有这些#temp表的情况下运行最后一个查询。

任何想法!!!

如何编写三个不同的函数,然后将所有三个查询放入这些函数中,然后从第三个查询中调用函数!!

谢谢

i


阅读 272

收藏
2021-03-17

共1个答案

一尘不染

如果您使用的是MSSql,请使用CTE

;with cte1 as (
    select {some columns} from {some tables} where {conditions1}
), 
cte2 as (
    select {some other columns} from {some tables} where {conditions2}
),
cte3 as (
    select {some other columns} from {some tables} where {conditions3}
)
select {some columns from all ctes} from cte1, cte2, cte3 where {conditions}

这将运行得更快,因为不需要将数据插入到临时表中。

避免使用临时表的另一个优点是,使用临时表有时会对性能产生严重的影响,因为整个sql服务器只有一个tempdb,而大量使用tempdb则可能会阻塞其他查询。只是google临时表和性能影响,您会发现很多关于该主题的文章

2021-03-17