我有三个查询,分别将数据放在各自的#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
如果您使用的是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临时表和性能影响,您会发现很多关于该主题的文章