当前位置: 首页 > 面试题库 >

Oracle中的递归查询

贺文彬
2023-03-14
问题内容

我对PLSQL的更高级主题还是陌生的,因此希望有人可以帮助我。

问题:
我有一个表,其中包含管理员和用户之间发送的消息。该表在同一表的message_id字段中具有带FK的message_parent:如果填充了该字段,则意味着该消息是作为对先前消息的答复而发送的。我需要选择属于同一对话的所有消息并显示它们。可以通过单个查询完成此操作,还是需要一个过程来处理这种逻辑?据我了解,它必须是递归的,因为我正在搜索的message_id总是在变化

**消息表示

|message_id|parent_id|message_content|
|----------|---------|---------------|
|101       |100      | foo           |
|100       |97       | bar           |
|99        |(null)   | Left out      |
|97        |(null)   | baz           |

因此,选择message_content的正确查询应返回“ baz”,“ bar”和“ foo”,但不返回“ Left
out”(因为baz是原始消息)。如果只有两个消息可以绑定在一起,或者有一个thread_id列可以将所有消息链接到同一个“线程”中,那么这将很简单,但是随着parent_id不断变化,我很难弄清楚它。


问题答案:

在Oracle中,使用以下方法很容易 CONNECT BY

select message_id, parent_id, message_content
from messages
start with message_id = 97 -- this is the root of your conversation
connect by prior message_id = parent_id;

这使树从上到下走动。

如果要将树从一条消息移到根,请更改start withconnect by部分:

select message_id, parent_id, message_content
from messages
start with message_id = 100 -- this is the root of your conversation
connect by prior parent_id = message_id; -- this now goes "up" in the tree


 类似资料:
  • 问题内容: 我目前在理解和编写递归查询时遇到一些麻烦。我知道递归查询用于搜索信息层次结构,但是我还没有找到一个可以遍历层次结构的简单在线解决方案。例如,假设我有一个对家谱建模的关系: 如果我想编写一个遍历此家谱的递归查询,收集所有父母直到出生,我该如何处理? 提前致谢。 问题答案: 您可以使用子句。 在您的情况下,SQL可能类似于:

  • 本文向大家介绍Oracle 11GR2的递归WITH子查询方法,包括了Oracle 11GR2的递归WITH子查询方法的使用技巧和注意事项,需要的朋友参考一下 下面给大家详细介绍Oracle 11GR2的递归WITH子查询方法,具体内容如下所示:   L   NM ----  ---------------   1   **KING   2   ****BLAKE   3   ******ALLE

  • 问题内容: 我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。 我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深

  • 问题内容: JPA 2是否具有运行递归查询的任何机制? 这是我的情况:我有一个实体E,其中包含一个整数字段x。它还可能具有通过@OneToMany映射的E类型的子代。我想做的是通过主键找到一个E,并获取其x的值以及所有后代的x值。有没有办法在单个查询中执行此操作? 我正在使用Hibernate 3.5.3,但我不希望在Hibernate API上没有任何明确的依赖关系。 编辑:根据这一项目,Hib

  • 问题内容: 学习SQL,并有一些问题。我有2张桌子, 现在,我需要的是一个查询,该查询将基于标记要从哪个层次层次结构级别获取参数的参数,从每个层次结构级别返回表中的所有条目。 获取条目非常容易。 条目: 只是有父母的父母,而父母的父母是父母的父母,依此类推。这是我怀疑递归出现的地方。 有谁可以指导思想的吗? 问题答案: 您对第一级的查询(此处与表格区别)应如下所示: 请注意的正确用法(不要总是与进

  • 问题内容: 我有下表: 我想让所有行都回溯,直到不再有parentID为止。因此, “ .... WHERE id = 5” 会给我: 问题答案: 您正在使用邻接表模型来组织层次结构数据。这种递归操作很困难的事实实际上是该模型的一个主要缺点。 一些DBMS(例如SQL Server 2005,Postgres 8.4和Oracle 11g)支持使用带有关键字的常用表表达式进行递归查询。 对于MyS