在我的 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
----+-----+------