问题标签 [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 投票
12 回答
193907 浏览

sql-server - 哪个性能更高,CTE 还是临时表?

哪个性能更高,CTE或者Temporary Tables

0 投票
10 回答
95691 浏览

sql - CTE 和子查询的区别?

从这篇文章如何在以下过程中使用 ROW_NUMBER?

有两个版本的答案,一个使用 asub-query另一个使用 aCTE来解决相同的问题。

那么,使用 aCTE (Common Table Expression)而不是“子查询”有什么好处(因此,查询实际在做什么更具可读性)

使用CTEover的唯一好处sub-select是我实际上可以sub-query. 当 CTE 用作简单(非递归)CTE 时,这两者之间还有其他区别吗?

0 投票
2 回答
1158 浏览

sql-server - 帮助查找从最后两条记录返回的值的差异(增量)

我正在使用 MS SQL 2005,并创建了一个 CTE 查询来返回最后两条记录的值。然后我用它来查找返回的两个数字的增量。我有各种各样的工作查询,但我在获取除 delta 数字之外的任何内容时遇到问题。

这是我的查询:

我所追求的是返回 Delta 和 NetObjectID。每次我尝试,我都会得到错误。 data.NetObjectID is invalid in the select list because it is not contained in either an aggregate function or the group by clause.

如果我尝试将 group by 等添加到查询的末尾,我会收到更多错误,抱怨“组”这个词。

我对 SQL 比较陌生,我边走边学。任何帮助将不胜感激。

0 投票
6 回答
15544 浏览

sql - 防止递归 CTE 多次访问节点

考虑以下简单的 DAG:

还有一个表,#bar,描述了这个(我使用的是 SQL Server 2005):

现在想象一下,我有一些其他任意标准来选择第一个和最后一个边,即 1->2 和 3->4。我想用这些来找到我的图表的其余部分。

我可以按如下方式编写递归 CTE(我使用的是MSDN中的术语):

但是,这会导致边 3->4 被选择两次:

如何防止查询递归到已经描述的子图中?如果在查询的“递归成员”部分中,我可以引用到目前为止由递归 CTE 检索到的所有数据(并在递归成员中提供一个谓词指示,不包括已访问的节点),我就可以实现这一点。但是,我认为我只能访问递归成员的最后一次迭代返回的数据。

当有很多这样的重复时,这将无法很好地扩展。有没有办法防止这种不必要的额外递归?

请注意,我可以在语句的最后一行使用“select distinct”来获得所需的结果,但这似乎是在完成所有(重复)递归之后应用的,所以我认为这不是一个理想的解决方案。

编辑- hainstech 建议通过添加一个谓词来排除在起始集中显式递归的向下路径来停止递归,即仅递归where foo.child_id not in (1,3)。这仅适用于上述情况,因为它很简单——所有重复的部分都从锚节点集中开始。它不能解决它们可能不是的一般情况。例如,考虑将边 1->4 和 4->5 添加到上述集合中。边缘 4->5 将被捕获两次,即使使用建议的谓词。:(

0 投票
2 回答
354 浏览

sql-server-2008 - 并行性如何影响结果的数量?

我有一个相当复杂的查询,看起来像这样:

该查询使得cte3填充了6222个 不同的结果。在最后的select中,我在cte3上与其自身执行交叉连接(以便稍后我可以将表中的每个值与表中的每个其他值进行比较)。注意最后一行:

显然,这会关闭并行性。

因此,在cte3中有6222个结果行,我希望 (6222*6221)/2 或19353531在随后的交叉连接选择中产生结果,并且在最终的maxdop行到位的情况下,情况确实如此。

但是,当我删除maxdop行时,结果数会跳转到19380454。我的开发盒上有 4 个内核。

怎么回事?谁能解释这是为什么?我是否需要重新考虑以前以这种方式交叉连接的查询?

0 投票
1 回答
474 浏览

nhibernate - 使用 CTE 分页数据,nHibernate 将如何处理这个问题?

我目前使用 CTE 处理数据分页,条件查询可以处理 CTE 吗?

0 投票
3 回答
605 浏览

sql-server - 尝试使用 CTE 对索引视图进行 FREETEXTTABLE 时出现严重错误

stockView 是具有全文索引的索引视图,我收到以下错误消息。该数据库以 2005 兼容模式在 2008 Express 引擎上运行。

代码:

错误:

当我删除内部联接和加权列时,查询有效。任何想法,我都不知所措。

0 投票
2 回答
7490 浏览

sql-server - 在 SQL Server 2005 中使用 CTE 进行递归查询

好的,这就是我想要做的。我在 MSSQL2005 中使用 CTE 查询。查询的目的是通过产品类别的父子关系进行递归,并返回每个类别下的产品数量(这包括子类别中包含的任何产品)

我当前的版本只返回所显示类别的产品数量。它没有考虑可能包含在其任何子项中的产品。

重现问题的数据库转储,以及我使用的查询和解释如下:

这是我使用的 CTE 查询:

首先,将“PC.ParentID”更改为 943。您将看到返回的三个记录显示每个显示的类别的产品计数。

现在,将 ParentID 从943更改为942并重新运行它。您现在会看到返回 1 个名为“Cardiology”的结果,但它显示 0 个产品 在此类别下,有包含产品的儿童(您之前看到的)。我的大问题是,在这个级别(父级 942)我怎样才能让它计算下面子级中包含的产品,以将 13 显示为“ProductCount”我有点想我可能需要一种更多的递归方法。我试过了,但没有成功。

我对可以执行我正在寻找的存储过程持开放态度。我没有设置在一种特定的方式上。因此,任何其他建议将不胜感激。

0 投票
2 回答
6839 浏览

sql - 在递归 SQL 表中查找最低公共父级

假设我有一个递归表(例如,有经理的员工)和一个0..nID 大小的列表。如何找到这些 id 的最低共同父级?

例如,如果我的表如下所示:

那么下面这组 id 会导致下面的结果(第一个是极端情况):

这该怎么做?

编辑:请注意,在所有情况下,父母都不是正确的术语。它是树上所有路径中最低的公共节点。最低的公共节点也可以是节点本身(例如,在这种情况下[1,8] => 1,节点1不是节点的父节点1而是节点1本身)。

亲切的问候,罗纳德

0 投票
2 回答
825 浏览

subsonic - Subsonic 3.0 Simplerepository:如何执行普通 sql (CTE)?

我一直在尝试 Subsonic,但遇到了一个问题,我希望能够通过 SimpleRepository 执行 CTE 并能够从该查询中取回我的 POCO。

使用 Simplerepository 方法时,有什么方法可以在 Subsonic 3.0 中执行直接 SQL?

为了解释我在 Northwind db 示例中的问题:我想获取所有具有属于这些类别 (1,2,3) 中的任何产品的订单。我只是想不出在 SimpleRepository Select 或 LINQ 中执行此操作的好方法。使用 CTE,我可以在几秒钟内完成此操作。

示例:如何:直接执行 SQL 查询 (LINQ to SQL)