0

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

  • ID
  • 父母身份
  • 资源
  • 终端
  • 相对

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

  • 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, terminal: 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但无法让它按照我想要的方式工作。

编辑

从 A 中选择

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
----+-----+------
4

1 回答 1

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
于 2014-09-05T17:10:48.183 回答