![]() |
1
11
在PostgreSQL中,有几种方法可以满足您的需要。
像这样:
|
![]() |
2
42
下面是使用公用表表达式的示例脚本:
上面的脚本创建一个名为
弗斯特
第二
然后,可以像处理普通表一样处理最终结果。在这种情况下,VAL列是求和的。 |
![]() |
3
34
自8.4版以来,PostgreSQL已经
recursive query support
对于使用SQL标准的公用表表达式
|
![]() |
4
15
如果您想要一个可移植的解决方案,可以在任何ANSI上使用 SQL-92 RDBMS,您将需要向表中添加一个新列。 Joe Celko是 Nested Sets 在SQL中存储层次结构的方法。你可以谷歌 "nested sets" hierarchy 了解更多关于背景的信息。 或者只需将parentID重命名为 左撇子 添加一个 右派 . 下面是我对嵌套集的总结,这将非常简短,因为我不是Joe Celko:SQL是一种基于集的语言,相邻模型(存储父ID)不是层次结构的基于集的表示。因此,没有纯粹的基于集合的方法来查询邻接模式。 然而 近年来,大多数主要平台都引入了扩展来处理这个精确的问题。所以,如果有人用postgres特定的解决方案来回复,那么一定要使用它。 |
![]() |
5
10
在中进行递归查询的标准方法
在早期版本中,可以编写递归集返回函数:
请参阅本文: |
![]() |
6
5
如果您使用的是SQL Server 2005,那么使用公共表表达式是一种非常酷的方法。 创建一个临时表需要完成所有的工作,而且基本上只需要一个with和一个union就可以完成所有的工作。 以下是一个很好的教程: http://searchwindevelopment.techtarget.com/tip/0,289483,sid8_gci1278207,00.html |
![]() |
7
5
使用A common table expression .
here's an article 在没有常用表表达式的情况下由sqlteam递归。 |
![]() |
8
2
下面的代码编译,测试结果正常。 create or replace function subtree (bigint) returns setof example as $$ declare results record; entry record; recs record; begin select into results * from example where parent = $1; if found then for entry in select child from example where parent = $1 and child parent loop for recs in select * from subtree(entry.child) loop return next recs; end loop; end loop; end if; return next results; end; $$ language 'plpgsql'; 在我的例子中,需要条件“child<gt;parent”,因为节点指向它们自己。 玩得开心: |
![]() |
9
1
Oracle有“Start with”和“Connect by”
|
![]() |
10
1
尽管这个问题已经得到了很好的回答,但要注意的是,如果我们将其视为:
然后,SQL实现是相当直接的,因为SQL'99允许在规范中进行线性递归(尽管我相信没有RDBMS完全实现标准),通过
|
![]() |
11
1
没有一个例子对我有用,所以我把它改成这样: declare results record; entry record; recs record; begin for results in select * from project where pid = $1 loop return next results; for recs in select * from project_subtree(results.id) loop return next recs; end loop; end loop; return; end; |
![]() |
12
0
这是SQL Server吗?您不能编写一个TSQL存储过程来循环并将结果联合在一起吗? 不过,如果有一种只有SQL的方法可以做到这一点,我也很感兴趣。从我在地理数据库类中记得的片段来看,应该是这样的。 |
![]() |
13
0
我认为在SQL 2008中使用 HierarchyID |
![]() |
14
-1
如果您需要存储任意图形,而不仅仅是层次结构,您可以将Postgres推到一边,并尝试使用图形数据库,例如 AllegroGraph : 图形数据库中的所有内容都存储为三重结构(源节点、边缘节点、目标节点),它为您提供了一流的支持,支持您操作图形结构并使用类似SQL的语言进行查询。 它不能很好地与Hibernate或Django ORM之类的东西集成,但是如果您认真对待图形结构(不仅仅是嵌套集模型提供的层次结构),请检查它。 我也相信甲骨文最终在他们最新的产品中增加了对真实图形的支持,但我很惊讶它花了这么长时间,很多问题都可以从这个模型中获益。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |