Questions tagged «common-table-expression»

公用表表达式(CTE)是一个临时结果集,在单个SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句的执行范围内定义。

9
何时使用通用表表达式(CTE)
我已经开始阅读有关公用表表达式的内容,无法想到需要使用它们的用例。它们似乎是多余的,因为可以对派生表执行相同的操作。我有什么想念的东西吗?有人可以通过常规选择查询,派生查询或临时表查询来举例说明CTE的局限性吗?任何简单的例子将不胜感激。

4
CTE,子查询,临时表或表变量之间是否存在性能差异?
在这个出色的SO问题中,讨论了CTE和之间的sub-queries差异。 我想特别问一下: 在以下哪种情况下,以下各项中的每一种都更有效/更快? CTE 子查询 临时表 表变量 传统上,我使用了大量的temp tables开发工具stored procedures-因为它们似乎比许多相互交织的子查询更具可读性。 Non-recursive CTE可以很好地封装数据集,并且可读性很强,但是在特定情况下有人可以说它们将始终表现更好吗?还是总是必须摆弄各种选项以找到最有效的解决方案? 编辑 最近有人告诉我,就效率而言,临时表是一个不错的首选,因为它们具有关联的直方图,即统计信息。


6
如何使用SELECT * INTO tempTable from CTE Query创建临时表
我有一个要从中创建临时表的MS SQL CTE查询。我不确定该怎么办,因为它会导致Invalid Object name错误。 下面是整个查询供参考 SELECT * INTO TEMPBLOCKEDDATES FROM ;with Calendar as ( select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, EventStartDate as PlannedDate ,EventType from EventCalender where EventActive = 1 AND LanguageID =1 AND EventBlockDate = 1 union all select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, dateadd(dd, 1, …

3
将INSERT INTO和WITH / CTE结合
我的CTE非常复杂,我想将结果插入物理表中。 以下有效吗? INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos ( BatchID, AccountNo, APartyNo, SourceRowID ) WITH tab ( -- some query ) SELECT * FROM tab 我正在考虑使用一个函数来创建此CTE,这将允许我重复使用。有什么想法吗?

2
保持简单以及如何在查询中进行多个CTE
我有这个简单的T-SQL查询,它从一个表中发出一堆列,并且还连接其他相关表中的信息。 我的数据模型很简单。我有一个预定的活动,有参与者。我需要知道每个活动有多少参与者。 我对此的解决方案是添加一个CTE,该CTE对计划的事件进行分组并计算参与者的数量。 这将使我能够在每个计划的活动中加入该信息。使查询保持简单。 我希望使查询保持简单,但是,如果将来在简单查询期间需要访问附加的临时结果,该怎么办? 如果可以有多个CTE,但我不能,我真的很喜欢,对吗?我在这里有什么选择? 我已经排除了在应用程序数据层的视图和操作。我更喜欢隔离我的SQL查询。

9
CTE和SubQuery之间的区别?
来自这篇文章如何在以下过程中使用ROW_NUMBER? 答案有两种版本,一种使用a sub-query,另一种使用a CTE来解决相同的问题。 现在,使用CTE (Common Table Expression)“子查询”而不是“子查询”有什么好处(因此,查询的实际可读性更高) 使用的唯一的优点CTE了sub-select,是我可以实际命名的sub-query。当将CTE用作简单(非递归)CTE时,这两者之间还有其他区别吗?


2
语句完成前已用尽最大递归100
我不断得到max recursion error这个查询。 起初我以为是因为返回了null,然后它会尝试与null值匹配,从而导致错误,但是,我重写了查询,因此不返回null并仍然发生错误。 什么是重写此功能的最佳方法,这样就不会发生错误 WITH EmployeeTree AS ( SELECT EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid, CASE Employees.APV_MGR_EMP_ID WHEN Null THEN '0' ELSE Employees.APV_MGR_EMP_ID END as ApprovalManagerId FROM dbo.[tEmployees] as Employees WITH (NOLOCK) WHERE APV_MGR_EMP_ID = @Id and Employees.APV_MGR_EMP_ID is not null and Employees.EMP_SRC_ID_NR is not null UNION ALL SELECT EMP_SRC_ID_NR Id, …

7
您如何在MySQL中使用“ WITH”子句?
我将所有SQL Server查询都转换为MySQL,并且WITH其中所有查询都失败了。这是一个例子: WITH t1 AS ( SELECT article.*, userinfo.*, category.* FROM question INNER JOIN userinfo ON userinfo.user_userid = article.article_ownerid INNER JOIN category ON article.article_categoryid = category.catid WHERE article.article_isdeleted = 0 ) SELECT t1.* FROM t1 ORDER BY t1.article_date DESC LIMIT 1, 3

4
SQL Server CTE和递归示例
我从不使用CTE进行递归。我只是在读一篇有关它的文章。本文通过Sql Server CTE和递归显示员工信息。它基本上显示了员工及其经理的信息。我无法理解此查询的工作方式。这是查询: WITH cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel) AS ( SELECT EmployeeID, FirstName, LastName, ManagerID, 1 FROM Employees WHERE ManagerID IS NULL UNION ALL SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID, r.EmpLevel + 1 FROM Employees e INNER JOIN cteReports r ON e.ManagerID = r.EmpID ) SELECT FirstName + ' …

2
如何在一个PostgreSQL查询中使用多个WITH语句?
我想使用WITH语句“声明”什么是有效的多个TEMP表。我尝试执行的查询大致如下: WITH table_1 AS ( SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date ) WITH table_2 AS ( SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date ) SELECT * FROM table_1 WHERE date IN table_2 我已经阅读了PostgreSQL文档并研究了使用多条WITH语句,但是找不到答案。

8
MySQL“ WITH”子句
我正在尝试使用MySQL创建带有“ WITH”子句的视图 WITH authorRating(aname, rating) AS SELECT aname, AVG(quantity) FROM book GROUP BY aname 但是MySQL似乎并不支持这一点。 我认为这是非常标准的,并且我确定Oracle支持此标准。无论如何,有没有强制MySQL使用“ WITH”子句?我已经尝试过使用MyISAM和innoDB引擎。这两个都不起作用。

2
如何在单个SELECT语句中具有多个公用表表达式?
我正在简化一个复杂的select语句,因此以为我会使用公用表表达式。 声明单个CTE可以正常工作。 WITH cte1 AS ( SELECT * from cdr.Location ) select * from cte1 是否可以在同一SELECT中声明和使用多个cte? 即此SQL给出了一个错误 WITH cte1 as ( SELECT * from cdr.Location ) WITH cte2 as ( SELECT * from cdr.Location ) select * from cte1 union select * from cte2 错误是 Msg 156, Level 15, State …

4
使用Postgres一次将数据插入3个表中
我想通过一个查询将数据插入3个表中。 我的表格如下所示: CREATE TABLE sample ( id bigserial PRIMARY KEY, lastname varchar(20), firstname varchar(20) ); CREATE TABLE sample1( user_id bigserial PRIMARY KEY, sample_id bigint REFERENCES sample, adddetails varchar(20) ); CREATE TABLE sample2( id bigserial PRIMARY KEY, user_id bigint REFERENCES sample1, value varchar(10) ); 每次插入我都会得到一个密钥作为回报,我需要将该密钥插入下表。 我的查询是: insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.