回答
CTE和臨時表之間最大的區別可能在於,CTE的執行範圍爲SELECT,INSERT,UPDATE,DELETE或CREATE VIEW語句的執行範圍爲單一。
基本上,您不能重複使用CTE,就像您可以使用臨時表一樣。
公共表表達式(CTE)可以被看作是一個單個 SELECT,插入,更新,刪除或執行範圍內定義的臨時 結果集CREATE VIEW語句。 CTE是 類似於派生表,因爲它不作爲對象存儲,並且 僅在查詢期間持續。與派生表不同,派生表不同,一個 CTE可以自引用並且可以在 多次引用相同的查詢。
的CTE可用於:
創建遞歸查詢。有關更多信息,請參閱使用公用表表達式的遞歸查詢。
當不需要使用視圖時替代視圖;也就是說,您不必將定義存儲在元數據中。
通過從標量子查詢派生的列或者非確定性或具有外部訪問權限的函數啓用分組。
在同一語句中多次引用結果表。
對我而言,最大的不同在於一個是實際表格,另一個不是。 「WITH CTE AS(SELECT * FROM MillionRowTable)SELECT TOP 1 * FROM CTE'和'INSERT INTO #T SELECT * FROM MillionRowTable; SELECT TOP 1 * FROM#T' –
@MartinSmith您的評論比答案本身有更多的票! –
它也可以用另一種方式:'insert into#table'然後'select ..其中xyz不在#table'中是快速的,但是重寫爲CTE會使其超速。 –
CTE: CTE代表公共表表達式。它是在SQL Server 2005中引入的。它用於在臨時基礎上存儲複雜子查詢的結果。它的生命侷限於當前的查詢。它通過使用WITH語句來定義。它主要用於遞歸調用。
例
;with myCTE as
(
select ParentLevel, ParentID, ChildID
from MHA
where ChildID = 1
UNION ALL
select MHA.ParentLevel, MHA.ParentID, MHA.ChildID
from MHA
inner join myCTE on MHA.ParentID = myCTE.ChildID
where MHA.ParentID <> 0
)
(誤差)
select top (5) * from myCTE
所以在上述例子中,我已創建CTE名稱作爲myCTE,只能被在上面的查詢(I可以用不使用上述查詢的myCTE出側)
TEMP:它也可以用來存儲查詢的臨時結果bases.But它的生命是有限的當前會話。它使用#定義。它不支持遞歸。
例子:
select * into #tempTable from MHA
在上面的查詢中,我創建臨時表,現在我可以在會話中使用它臨時表了這個查詢的一面,但用。見下面
(沒有錯誤)
select top (5) * from #tempTable
- 1. 「struct node * temp」和「struct node *&temp」之間的區別是什麼?
- 2. java中的Array和Hashmap之間的主要區別是什麼?
- 3. 框架和工具包之間的主要區別是什麼?
- 4. Java SE和Java EE之間的主要區別是什麼?
- 5. G1GC和SGen GC之間的主要區別是什麼
- 6. VB Express 2008(pro)和2010之間的主要區別是什麼?
- 7. C++中stdlib.h和cstdlib之間的主要區別是什麼?
- 8. Python和PHP之間的主要區別是什麼?
- 9. AsyncTask()和Handler()之間的主要區別是什麼?
- 10. Rails 1.X和2.X之間的主要區別是什麼
- 11. ReadOnly和Enabled之間的主要區別是什麼?
- 12. Sinatra和Ramaze之間的主要區別是什麼?
- 13. logstash和apache storm/spark streaming之間的主要區別是什麼?
- 14. Compiler和Transpiler之間的主要區別是什麼
- 15. 什麼是Haskell,python和c函數之間的主要區別?
- 16. Ruby 1.8.6和1.9.1之間的主要區別是什麼?
- 17. Dictionary和Hashtable之間的主要區別是什麼
- 18. android中asynctask和thread之間的主要區別是什麼?
- 19. 在VB.net ADODB和SqlClient之間的主要區別是什麼
- 20. SVN客戶端和API之間的主要區別是什麼?
- 21. NSURLConnection connectionWithRequest:delegate和sendAsynchronousRequest:queue:completionHandler之間的主要區別是什麼?
- 22. include_once和require_one之間的主要區別是什麼?
- 23. kohana 3.0.x和3.1.0之間的主要區別是什麼?
- 24. freeglut和glut之間的主要區別是什麼
- 25. ContainerControlledLifetimeManager和HierarchicalLifetimeManager之間的主要區別是什麼?
- 26. Meteor,Ember.js和Backbone.js之間的主要區別是什麼?
- 27. Docker和Kubernetes之間的主要區別是什麼
- 28. Socialauth,Scribe-Java和Spring Social之間的主要區別是什麼?
- 29. Ext.Direct Pack和Ext.Air Pack之間的主要區別是什麼
- 30. FLTK 1.1和1.3之間的主要區別是什麼
從DBA的網站[什麼是CTE和臨時表之間的區別?(http://dba.stackexchange.com/q/13112/ 3690) –
我對性能差異瞭解不多,但是cte允許簡單的循環和遞歸,如果查詢輸出將被多次訪問並且重新運行將浪費時間,那麼臨時表很方便。 –
他們是不同的東西,真的是課程的馬匹。哪一個最好取決於你的確切場景。你的問題不比'使用視圖而不是表格有什麼好處?'含義不明確。 – GarethD