回答
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