遍历时携带变量

时间:2014-09-05 12:24:16

标签: orientdb graph-traversal

在我的OrientDB数据库中,我有一个文档类A,它有4个字段和一个关系:

  • ID
  • parentId的
  • 终端
  • 相对

我需要选择具有终端设置的所有元素的根元素的来源。一个例子是:

  • A1 :( Rel:NULL,id:1,parentId:NULL,source: test
  • A2 :( Rel:A1,id:2,parentId:1)
  • A3 :( Rel:A2,id:3,parentId:2)
  • A4 :( Rel:A3,id:4,parentId:3,终端: no1
  • A5 :( Rel:A4,id:5,parentId:4)

我需要得到的是: 终端: no1 ,来源:测试

我现在能做的就是获取所有来源,但我不知道他们属于哪个终端:

SELECT source FROM (TRAVERSE A.Rel FROM (SELECT FROM A WHERE terminal IS NOT NULL) WHILE $depth <= 99) WHERE parentId IS NULL

我尝试使用LET,但无法按照我想要的方式运行。

修改

从一个

中选择
orientdb {GratefulDeadConcerts}> select from A

----+-----+----+--------+------+--------+-----
#   |@RID |id  |terminal|source|parentId|Rel
----+-----+----+--------+------+--------+-----
0   |#15:0|1   |null    |test  |null    |null
1   |#15:1|2   |null    |null  |1       |#15:0
2   |#15:2|3   |null    |null  |2       |#15:1
3   |#15:3|4   |no1     |null  |3       |#15:2
4   |#15:4|5   |null    |null  |4       |#15:3
----+-----+----+--------+------+--------+-----

首先尝试使用LET

orientdb {GratefulDeadConcerts}> SELECT source, $terminal FROM ( TRAVERSE A.Rel FROM ( SELECT FROM A WHERE terminal IS NOT NULL LET $parent.$parent.$terminal = terminal ) ) WHERE parentId IS NULL

----+-----+------
#   |@RID |source
----+-----+------
0   |#-2:1|test
----+-----+------

1 个答案:

答案 0 :(得分:1)

试试这个(抱歉没有数据库可能很难)

SELECT source, $terminal FROM (
  TRAVERSE A.Rel FROM (
    SELECT FROM A WHERE terminal IS NOT NULL LET $parent.$parent.$t = terminal
  ) WHILE parentId IS NOT NULL
) WHERE parentId IS NULL