问题标签 [common-table-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
14921 浏览

sql - 我可以在 TSQL 中使用 WITH 两次来过滤像我的示例那样的结果集吗?

我需要做这样的事情,但 SQL Server 2008 不喜欢它。我的查询实际上比这更复杂,我意识到这不是完成我正在做的事情的最佳方式,但我的重点是 WITH 语句的功能,而不是 select 和 where 语句。

WITH stuff1 AS(从 startdate > 0 的员工中选择名称、开始日期、id)

WITH stuff2 AS(从 stuff1 中选择名称、开始日期、id)

select * from stuff2 where id > 10

0 投票
1 回答
5116 浏览

c# - Linq-to-Sql:递归获取孩子

我有一个 Comment 表,它有一个 CommentID 和一个 ParentCommentID。我正在尝试获取评论的所有子项的列表。这是我目前所拥有的,我还没有测试过。

2个问题:

  1. 有什么明显的方法可以改善这一点吗?(除了可能使用 CTE 在 sql 中创建视图。)
  2. 为什么我不能IEnumerable <Comment>向 IEnumerable屈服<Comment>,只能向Comment它自己屈服?
  3. 无论如何在这种情况下使用 SelectMany 吗?
0 投票
4 回答
7570 浏览

sql-server-2005 - SQL 2005 中递归查询结果的排序层次结构

我有一个包含以下列的“任务”表(TaskOrder 用于在父级范围内对子级进行排序,而不是整个表):

我有这个 CTE 查询来返回所有行:

此查询返回您所期望的按级别排序的所有任务。如何更改它以将结果排序为如下的层次顺序?

谢谢。

编辑:答案应该适用于无限数量的级别。

0 投票
4 回答
4600 浏览

sql - 递归 SQL CTE 和自定义排序顺序

图像您正在为线程化讨论板创建数据库模式。有没有一种有效的方法来为给定线程选择正确排序的列表?我编写的代码有效,但也没有按照我想要的方式排序。

假设您有以下数据:

所以结构应该是这样的:

理想情况下,在代码中,我们希望结果集按以下顺序出现:1、2、3、5、4
问题:使用我编写的 CTE,它实际上返回为:1、2、4、3、5

我知道这很容易通过使用 LINQ 进行分组/排序,但我不愿意在内存中这样做。不过,这似乎是目前最好的解决方案......

这是我目前使用的 CTE:

任何帮助,将不胜感激; 谢谢!



我是 SQL 新手,之前没有听说过 hierarchyid 数据类型。在从这个评论中阅读它之后,我决定我可能想要将它纳入我的设计中。今晚我将对此进行试验,如果成功,我会发布更多信息。



使用 dance2die 的建议更新从我的示例数据返回的结果:

0 投票
1 回答
1276 浏览

sql-server - 当我使用 CTE 进行 maxrecursion 时应该怎么做?

我有一个 CTE 正在做一些递归。想象问题空间的最简单方法是在世界各地的汽车中使用的电阻器,并且您拥有所有这些信息。电阻器 A 用于板 B 和 C,用于 DashAssembly D、E、F...ZZ,用于汽车 AAA、AAB 和 AAC。

我让 CTE 与一个零件一起工作,检查了结果,一切都很好(使用 100 的 MAXRECURSION)。然后我添加了一个在零件树中更常见的零件。轰,坏了。我尝试将 MAXRECURSION 提高到 32767,但它仍然坏了。查看数据,这个特定的部分被到处使用。在第二级递归中,它有 426 个父级。依此类推,我认为是 6 级递归。这是有道理的(我认为)这是轰炸MAXRECURSION。

下一个问题是,B计划是什么?我从来没有做过任何不使用 CTE 的递归。

更新:答案是:确保你没有任何循环引用,并确保你的递归表正确过滤了它的连接(我没有正确地做第二个)。基本上我搞砸了,并认为我的问题是我疯狂的狂野数据,而不是我蹩脚的 sql 技能。

0 投票
2 回答
70957 浏览

sql - 如何在单个 SELECT 语句中拥有多个公用表表达式?

我正在简化一个复杂的选择语句,所以我想我会使用公用表表达式。

声明一个 cte 可以正常工作。

是否可以在同一个 SELECT 中声明和使用多个 cte?

即这个sql给出了一个错误

错误是

注意。我尝试输入分号并收到此错误

可能不相关,但这是在 SQL 2008 上。

0 投票
1 回答
14328 浏览

linq-to-sql - linq-to-sql 中的公用表表达式(CTE)?

是否可以在 Linq to SQL 中执行公用表表达式 (CTE)(如下所示)。我对 CTE 和 Linq to SQL 还是很陌生。

我目前是免费的存储过程(但不以任何方式反对它们)所以我不想仅仅为了一个查询就跳到存储过程,除非它是完全必要的。

这是我在 SQL 中所做的一个示例,我想知道我是否可以在 Linq to SQL 中做:

0 投票
1 回答
8117 浏览

sql - CTE 遍历备份层次结构?

我可以在分层数据模型中找到给定记录的所有子项(请参见下面的代码),但我不确定如何使用给定的子 ID 遍历父/子链。谁能指出我正确的方向来弄清楚如何做到这一点?这在 Linq to SQL 中也可能吗?

0 投票
8 回答
26342 浏览

sql-server - SQL Server:如何将 CTE 递归限制为刚刚递归添加的行?

更简单的例子

让我们尝试一个更简单的示例,这样人们就可以围绕这些概念进行思考,并有一个可以复制并粘贴到 SQL Query Analizer 中的实际示例:

想象一个具有层次结构的节点表:

我们可以在 Query Analizer 中开始测试:

期望的输出:

现在建议的 CTE 表达式,它的输出不正确:

实际输出

注意:如果 SQL Server 2005† CTE 无法完成我在 2000 年之前所做的事情‡,那很好,这就是答案。给出“不可能”作为答案的人将赢得赏金。但我会等几天以确保每个人都同意这是不可能的,因为我无法解决我的问题而无法挽回地给予 250 名声望。

吹毛求疵的角落

†不是 2008 年

‡无需诉诸 UDF*,这是已有的解决方案

*除非您可以在原始问题中看到提高 UDF 性能的方法


原始问题

我有一个节点表,每个节点都有一个指向另一个节点(或 null)的父节点。

举例说明:

我想要一个返回所有父子关系的表,以及它们之间的代数

对于所有直接父关系:

但是还有祖父母关系:

还有曾祖父母的关系:

所以我可以弄清楚基本的 CTE 初始化:

现在的问题是递归部分。当然,显而易见的答案是行不通的:

生成整个递归列表所需的所有信息都存在于初始 CTE 表中。但如果不允许这样做,我会尝试:

但这失败了,因为它不仅加入了递归元素,而且一遍又一遍地递归地添加相同的行:

在 SQL Server 2000 中,我使用用户定义函数 (UDF) 模拟了 CTE:

阻止它爆炸的魔法是限制 where 子句:WHERE CurrentParents.Generations - @Generations-1

如何防止递归 CTE 永远递归?

0 投票
2 回答
6881 浏览

sql-server - 如何创建 SQL Server 2005 CTE 以返回父子记录,用于具有多个父项的子项

我正在 SQL Server 中试验 CTE,但在使以下场景正常工作时已经走到了死胡同。我有一个类似于这样的层次结构表:

预期成绩:

所以基本上我们有一个父子层次表,有一个细微的区别。每个孩子可能有不止一个父母。我研究了许多博客文章和 StackOverflow 帖子,关于创建返回父子记录的 CTE,但它们并没有返回孩子的所有父母,只是它找到的第一个。

这是我尝试的示例 CTE:

(注:为保护隐私,上述 CTE 中的表名和列名已从原始更改。)

上面的 CTE 工作正常,它找到了从 ID:439 开始的所有父子记录,但它只找到了 ID:900 的一个父项,即使它有两个父项。

有人可以让我知道这是否可以使用 CTE,或者是否有另一种 SQL 方法可以做到这一点?

干杯。贾斯。