问题标签 [hierarchical-query]

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 投票
7 回答
21400 浏览

sql - 使用递归子查询分解进行循环检测

从 v2 开始,Oracle SQL 可以使用其专有的 CONNECT BY 语法进行分层查询。在他们最新的 11g 第 2 版中,他们添加了递归子查询分解,也称为递归 with 子句。这是 ANSI 标准,如果我理解正确的话,其他 RDBMS 供应商也已经实现了这一标准。

在将连接方式与递归方式进行比较时,我注意到使用循环检测时结果集有所不同。按结果连接对我来说更直观,所以我想知道 Oracle 的实现是否包含错误,或者这是否是标准 ANSI 和预期行为。因此,我的问题是您是否可以使用 MySQL、DB2、SQL Server 等其他数据库来检查递归查询。如果这些数据库当然支持递归 with 子句。

这是它在 Oracle 11.2.0.1.0 上的工作方式

使用 CONNECT BY 语法的查询:

这对我来说很直观。然而,使用新的 ANSI 语法,它又返回一行:

这是您可以用来检查的脚本:

0 投票
2 回答
2471 浏览

sql - 如何在分层查询中获得不同的元素列表?

我有一个数据库表,其中的人由姓名、工作和城市标识。我有第二个表,其中包含每个城市公司中每个工作的分层表示。

假设我在 people 表中有 3 个人:

我在工作表中有数千个工作类型/位置组合,下面是其中的一个示例。您可以看到层次关系,因为 parent_title 是标题的外键:

......

我遇到的问题是我的 Person 表是一个复合键,所以我不知道如何构造start with我的查询部分,以便它从我指定的城市中的三个工作中的每一个开始。

我可以执行三个单独的查询来获得我想要的,但这不能很好地扩展。例如:

我怎么才能得到一个不同的列表(或者如果不可能的话,我可以用一个不同的列表来包装它)在我指定的三个人之上的所有工作?

0 投票
1 回答
1391 浏览

sql - Oracle分层查询执行步骤

这是文档:http: //download-east.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.htm

这是它描述的执行顺序:

  1. 如果存在连接,则首先评估连接,无论连接是在 FROM 子句中指定还是使用 WHERE 子句谓词。
  2. 评估 CONNECT BY 条件。
  3. 评估任何剩余的 WHERE 子句谓词。

我的问题是,上面的第 1 部分是否适用于嵌套查询。例如,如果我有:

where 子句中的连接是否立即执行,或者,因为 foo.foo_id 在此上下文中实际上是一个值,它是否在执行其余单值条件限制的第 3 部分执行?

0 投票
2 回答
3356 浏览

sql - Oracle 10g Connect By Prior - 性能问题

我有以下 SQL 语句:

这在一张有大约 160 万只动物的桌子上。每条记录都有 Animal_Id、Sire_Animal_Id 和 Dam_Animal_Id(Sire = 父亲,Dam = 母亲)。

我使用这个 sql 来显示完整的动物谱系。结果将显示动物、2 个父母、4 个祖父母等。

我的问题是,对于一只动物来说,这个语句需要 15 秒。必须有一种方法来优化这一点。有什么想法吗?

0 投票
3 回答
681 浏览

sql - 如何查询树中两个节点之间的所有节点?

我有一个分层数据库结构,例如列IDPARENT_ID为每一行定义,顶层行具有NULL PARENT_ID.

我将这个表中的所有关系展平到另一个表中,例如,如果祖父母、父母、孙子的单个层次结构中有 3 条记录,则将有 3 条记录:

与其执行分层查询来确定孙子是祖父的后代,我可以简单地检查(grandparent, grandchild)这个扁平表中是否存在记录。

我的问题是,使用这个扁平表,我怎样才能最有效地返回两个节点之间的所有记录。使用示例,使用grandparentgrandchild作为我的参数,我怎样才能取回(grandparent, parent)记录。

我不想使用分层查询来解决这个问题......我想知道是否可以在没有任何连接的情况下做到这一点。

0 投票
3 回答
694 浏览

sql - 搜索具有层次结构的 DBMS

在现有 RDBMS 之上是否有任何开源分层数据库或仿真?

我正在搜索一个 DMBS(或现有 RDBMS 的插件),它可以存储分层数据并允许对分层数据执行查询(例如“SELECT LEVEL ... CONNECT BY ...”、“SELECT PARENT ...” )。我知道 Oracle 有一些支持,但有更复杂的解决方案吗?

0 投票
1 回答
665 浏览

sql - 在 MySQL 中拆分路径枚举模型 PathString

我正在尝试按照 Joe Celko 的(第 38 页)实现路径枚举模型。我的表(以及只包含连续整数的支持表)的相关属性如下所示:

_IntegerSeries 包含整数 1 到 n,其中 n 比我需要的要大。贡献包含三个记录:

...我使用了乔的查询的修改版本:

... 成功返回包含层次结构中所有 ContributionID 3 上级的结果集。现在,在此示例中,PathString 列保存纯整数值,显然一旦我们达到 ContributionID 10 就会遇到麻烦。所以我们修改 PathString 列以包含分隔符:

现在......这本书没有给出当 PathString 使用分隔符时获得上级的例子......所以我以后必须弄清楚。但它确实给出了如何拆分 PathString 的示例(我猜这将帮助我进行更好的搜索)。执行此操作的示例代码的 MySQL 版本是:

...但是此代码返回一个空的结果集。我做错了什么,但我不确定是什么。在用电子邮件打扰乔之前,我想我会把它发布给 stackoverflow 社区。有人有什么想法吗?


更新


Quassnoi 的查询……经过测试略有修改,但功能上与他原来的完全一样。非常好。比我用的干净多了。非常感谢。

0 投票
2 回答
1810 浏览

sql-server - 我可以从 SQL Server 存储过程中检索分层数据结构吗?

我有一个 Web 服务,其中一个方法返回一个项目列表,每个项目都拥有另一个项目列表:

这些列表是使用简单查询从 SQL Server 数据库中检索出来的(两者都TopLevelItem对应LowLevelItem于数据库中的相关表)。

到目前为止,要检索所有这些数据,我需要两个查询:一个是检索顶级项目,它执行一次;另一个是检索顶级项目。另一个用于检索低级项目,每个顶级项目执行一次。

然而,这似乎是非常低效的。我想定义一个存储过程来执行所有必要的查询并将结果作为分层数据结构检索。是否可以?如果是这样,怎么做?

0 投票
3 回答
11385 浏览

oracle - 需要一个 Oracle 分层查询,该查询仅返回子项与搜索字符串匹配的记录的完整树

这是此查询的完整示例数据集,没有修剪任何节点与搜索字符串匹配的树:

如果用户搜索“foo”,我需要返回以下内容:

实际情况稍微复杂一些(即我想要返回的树中的三个级别),但这抓住了问题。在英语中,返回与搜索字符串匹配的节点的祖先树,该搜索字符串从文本列上的匹配节点开始,并返回所有祖先。

我是 Oracle 的新手(至少最近是这样)并尝试添加到 CONNECT BY 子句但没有任何成功 - 总是返回以下内容:

PS - 关于此的 oracle 文档和示例暗示 CONNECT_BY_ROOT 将捕获祖先,但它似乎所做的只是返回顶级(ROOT)值。

0 投票
9 回答
3262 浏览

sql - 找到第二高的薪水

好吧,这是一个众所周知的问题。考虑以下

我们需要找出第二高的薪水

不知何故不起作用...我没有得到正确的结果。谁能帮帮我。