我有一个查询,可以使用公用表表达式来检索页面的所有模块和子模块。是否可以多次使用cte的结果?
例子
WITH top_level_modules (
[AppContentModuleID]
,[SortIndex]
,[ContentHolderName]
,[OwnerType]
,[AppContentModuleGuid]
,[parent_AppContentModuleID]
,[ModuleID]
,[RenderIDTag]
,[WrapperType]
,[Level]
)
AS
(
SELECT amcp.[AppContentModuleID]
,amcp.[SortIndex]
,amcp.[ContentHolderName]
,1
,amc.[AppContentModuleGuid]
,amc.[parent_AppContentModuleID]
,amc.[ModuleID]
,amc.[RenderIDTag]
,amc.[WrapperType]
,0 AS [Level]
FROM [dbo].[application_module_content_page] amcp
INNER JOIN [dbo].[application_module_content] amc on amcp.[AppContentModuleID] = amc.[AppContentModuleID]
WHERE amcp.[PageID] = @PageID
UNION
SELECT amcm.[AppContentModuleID]
,amcm.[SortIndex]
,amcm.[ContentHolderName]
,2
,amc.[AppContentModuleGuid]
,amc.[parent_AppContentModuleID]
,amc.[ModuleID]
,amc.[RenderIDTag]
,amc.[WrapperType]
,0
FROM [dbo].[application_module_content_masterpage] amcm
INNER JOIN [dbo].[application_module_content] amc on amcm.[AppContentModuleID] = amc.[AppContentModuleID]
WHERE amcm.[AppMasterPageID] = @MasterPageID
),
child_modules AS
(
SELECT tlm.[AppContentModuleID]
,tlm.[SortIndex]
,tlm.[ContentHolderName]
,tlm.[OwnerType]
,tlm.[AppContentModuleGuid]
,tlm.[parent_AppContentModuleID]
,tlm.[ModuleID]
,tlm.[RenderIDTag]
,tlm.[WrapperType]
,tlm.[Level]
FROM top_level_modules tlm
UNION ALL
SELECT
amc.[AppContentModuleID]
,CASE WHEN amc.[SortIndex] IS NULL THEN tlm.[SortIndex] ELSE amc.[SortIndex] END
,null
,3
,amc.[AppContentModuleGuid]
,amc.[parent_AppContentModuleID]
,amc.[ModuleID]
,amc.[RenderIDTag]
,amc.[WrapperType]
,[Level] + 1 AS [Level]
FROM [dbo].[application_module_content] amc
INNER JOIN child_modules tlm on tlm.[AppContentModuleID] = amc.[parent_AppContentModuleID]
)
SELECT *
FROM child_modules cm
ORDER BY cm.[OwnerType]
, cm.[Level]
, cm.[SortIndex]
SELECT apcs.[StyleType]
,apcs.[StyleName]
,apcs.[StyleValue]
FROM child_modules cm
INNER JOIN dbo.[application_module_content_style] apcs
on cm.AppContentMdouleID = apcs.AppContentMdouleID
第一个选择有效,但是第二个选择引发错误“无效的对象名称’child_modules’”。
从该WITH common_table_expression
手册:
指定一个临时的命名结果集,称为公用表表达式(CTE)。这是从一个简单的查询派生的,并 在 单个
SELECT,INSERT,UPDATE或DELETE语句的执行范围内定义
。
So, no, you can’t extend the scope of the CTE beyond the SELECT statement it
was defined in. You will have to store the result in a temporary table or
table valued variable if you want to use the result more than once.
本文向大家介绍postgresql SELECT查询中的公用表表达式,包括了postgresql SELECT查询中的公用表表达式的使用技巧和注意事项,需要的朋友参考一下 示例 公用表表达式支持提取较大查询的部分。例如:
问题内容: 在MSSQL 2008中使用多个CTE时,通常用逗号将它们分开。 但是,当我在Teradata环境中尝试此操作时,语法出现错误。 适用于MS SQL: 现在,尝试使用Teradata语法: 语法错误,应在’,’和’RECURSIVE’关键字之间使用名称或Unicode分隔标识符之类的名称。 第二次尝试(不使用RECURSIVE多次) 不支持多个WITH定义。 问题答案: Teradat
问题内容: 我正在尝试优化执行以下操作的查询: 该查询计划表明,即使在100%的行满足WHEN子句的情况下,也有相当多的时间花费在ELSE分支中对结果的调用上。 我能理解的唯一方法是假定SQLServer正在评估两个结果,然后仅基于对WHEN条件的评估来选择一个,但是我找不到关于CASE结果是否有任何确定的参考语句在条件语句之前进行评估。任何人都可以澄清或指向我参考吗? 问题答案: 那是实际的还是
问题内容: 我本来希望以下查询返回所有带有各自子代的人。 但是实际上,它的确是相反的。我想不出无需额外的CTE就能进行正确嵌套的方法。有办法吗? 示例数据 结果 预期结果 问题答案: 该rCTE从另一侧遍历树: SQL提琴。 使用到每个节点聚集多个分支外。 与您期望的结果之间的微小差异: 这包括在列中。 没有将单个节点包装到数组中。 都可以进行调整,但是我希望结果对您来说是可以的。
问题内容: 有没有办法让AngularJS在模型数据中评估表达式? HTML: 模型: 最终结果将是:。 问题答案: 您可以使用该服务来插值字符串… JSFiddle
问题内容: SQLite是否支持公用表表达式? 我想运行这样的查询: 问题答案: 从Sqlite版本3.8.3开始,SQLite支持公用表表达式。 变更记录 指示