问题标签 [recursive-cte]
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.
sql-server - SQL Server:选择父子
我有一个SQL Server 2008,其中有一个名为ProductCategories的表,其设计如下:
我想从此表中进行选择,并获得如下结果集:
我试过这个,但这显然给了我没有 ParentId 的那些:
如果可以,请你帮助我 :)
—— 不懂SQL的家伙
sql-server - 递归 CTE 问题
我试图在 SQL Server 中使用递归 CTE 从包含基础树结构的表中构建谓词公式。例如,我的表如下所示:
...表示 ((a > alpha) AND (b > beta)) OR ((c > gamma) AND (a < delta))。
ParentId 是对父节点同表中的Id的引用。
我想编写一个查询,它将从表中构建这个字符串。可能吗?
谢谢
sql - 使用递归公用表表达式,如 while 循环
我有下表
给定日期作为参数,我必须找到编号。或使用递归 cte从开始日期到一个月后每天记录的日志计数。 有些日子可能没有任何日志,所以我必须将计数打印为 0。
前任:
返回
对于 2011-01-17 作为输入,输出应为
我必须使用递归cte 来做到这一点。我不知道如何在每次递归中将日期增加 1 以及如何停止\终止递归。
这是我到目前为止所做的事情:
sql - 为什么递归 CTE 以程序方式运行分析函数 (ROW_NUMBER)?
我昨天回答了一个递归 CTE,它暴露了在 SQL Server 中实现这些方法的问题(也可能在其他 RDBMS 中?)。基本上,当我尝试ROW_NUMBER
针对当前递归级别使用时,它会针对当前递归级别的每一行子集运行。我希望这将在真正的 SET 逻辑中工作,并针对整个当前递归级别运行。
从这篇 MSDN 文章看来,我发现的问题是预期的功能:
CTE 递归部分中的分析和聚合函数应用于当前递归级别的集合,而不是应用于 CTE 的集合。像 ROW_NUMBER 这样的函数只对当前递归级别传递给它们的数据子集进行操作,而不是传递给 CTE 递归部分的整个数据集。有关更多信息,请参阅 J. 在递归 CTE 中使用分析函数。
在我的挖掘中,我找不到任何地方可以解释为什么选择它以它的方式工作?这更像是基于集合的语言中的一种程序方法,因此这与我的 SQL 思维过程相悖,并且在我看来非常令人困惑。有人知道和/或有人可以解释为什么递归 CTE 以程序方式在递归级别处理分析函数吗?
这是帮助可视化的代码:
请注意,RowNumber
每个代码输出中的列。
这是我期望 CTE 做的第二个 SQLFiddle(再次只需要第二级来显示问题)
我一直设想 SQL 递归 CTE 运行得更像这样 while 循环
postgresql - PostgreSQL 将数据从递归 CTE 传递到函数
我有以下问题:我正在尝试发现从源节点(node_s)到目标节点(node_t)的所有可能路径。
带有图边的原始表格的格式很简单:| 节点_x | 节点_y | 实力 | ,其中“node_x”->“node_y”是直接边,边的强度为“权重”。
这个想法是,如果在探索路径期间的任何时候,我们发现其子节点中的一个节点具有目标node_t,我们记录该路径并停止从该节点探索路径,否则继续探索。
简单的解决方案是使用 PostgreSQL 的递归 CTE,它构造图的传递闭包:
上面的代码将从源节点node_s发现所有可能的路径。只有在传递闭包构造之后,我才能选择从源节点到目标节点的所需路径行(参见最后一个 SELECT 语句)。
例子:
best_path 表有以下数据:
询问:
找到从源节点 = 1 到目标节点 = 4 的路径
结果:
这不是我需要的。由于已经有从节点 2 到节点 4(目标)的直接边,我不需要路径 1.2.5.、1.2.4.8.、1.2.4.9.、1.2.5.10.、1.2.5.11.,路径探索对于节点 2,应该在发现从 2 到 4 的路径时停止。
总而言之,如果节点已经具有到目标节点的直接边缘,我不想发现节点的路径。这意味着在 CTE 的递归术语中,我希望有一些条件可以说明以下内容,伪代码如下:
作为查找从源节点 = 1 到目标节点 = 4 的路径的查询的结果,我想要以下内容:
在此先感谢您的帮助!
我已经尝试了很多方法:例如 FROM/WHERE 子句中的条件,尝试将 CTE 传递给函数,但没有成功。
任何建议将不胜感激。
我有自己的递归函数,可以实现我想要的,但是,在大量数据上它非常慢;而且 PostgreSQL 的 CTE 显然优化得很好,所以我想深入研究一下。
sql-server-2008 - 无法使用递归 CTE 找到匹配的子记录
我有下表@t:
如果我通过 ParentId = P1,则所需的输出是 x3
即停止条件是匹配记录的最后一行并获取该记录的 sku 名称
排。如果没有匹配的行,则返回 null
我的尝试(虽然没有工作)
请帮忙
sql - 使用 WITH RECURSIVE 查找所有复合类型组件类型
给定typname
复合类型,如何递归oids
查找所有组件类型的类型?
例子:
我可以得到oids
成员的类型t_employee
:
但我需要递归,我想这可以使用WITH RECURSIVE
:
但这并没有找到t_station
复合类型的内部数组。
sql - 将脚本从 MSSQL 转换为 PL/pgSQL
我刚开始使用 EVE 静态转储,它只是很多包含游戏数据的表格,例如太阳能系统连接的列表,这就是我正在处理的内容。我想制作一个网页,让您过滤掉系统,第一步是获取附近系统的列表,以及到它们的距离。
我找到了一个用于 MSSQL 的脚本
我知道我可能只使用 MSSQL 版本的转储,但我也想更多地了解如何更好地使用 PostgreSQL。
我了解它在做什么以及一切,但我对 PL/pgSQL 的理解还不够好,无法使其正常工作。
我的尝试是
产生的错误是
感谢所有的帮助。
sql - 递归查询中的数值溢出:Teradata
我是 teradata 的新手。我想将数字 1 到 1000 插入到test_seq
创建如下的表中。
在这个网站上搜索后,我想出了 recursive 查询来插入数字。
test_dual
如下创建,它只包含一个值。(类似于 Oracle 中的 DUAL)
但是,当我运行插入语句时,我得到了错误,Failure 2616 Numeric overflow occurred during computation.
我在这里做错了什么?integer
数据类型不足以容纳数值 1000 吗?另外,有没有办法编写查询,以便我可以取消test_dual
表格?
sql - 使用 cte 获取给定所有祖先节点属性的完整路径的最后一个节点
给定以下 PostgreSQL 表:
目前我手动构建 sql 查询,为每个路径元素进行连接。但这对我来说似乎很丑陋,当然它限制了可能的深度。
例子:
我想知道是否有更好的方法,可能使用 CTE?
您可以看到我当前的代码是如何工作的以及预期的输出是什么:http:
//sqlfiddle.com/# !1/4537c/2