如何在OrientDB中合并两个查询的结果

3
假设我有4个顶点类:V1,V2,V3,V4 还有3个边缘类:E1,E2,E3
然后它们的实例(可能)像这样相互连接:
V1 --E1--> V2
V2 --E2--> V3
V2 --E3--> V4
V3 --E3--> V4

因此,图形方面可能是这样的:

V1---E1---V2
          |   \
          E2    E3
          |        \
          V3---E3---V4

按照上面所示的方向。

我现在对从V1到V4沿着上述准确边缘的路径感兴趣(它们之间可能还有其他边缘,我们不知道,因此只有已经提到的边缘类型可以使用。)

要检查从V1到V4的路径是否存在(如果路径存在,将返回V4):

SELECT EXPAND(out('E1').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>

检查其他路径是否存在(如果存在,则返回 V4):
SELECT EXPAND(out('E1').out('E2').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>

我唯一的兴趣是知道这两条路径中是否存在一条。我希望通过一次查询来实现这个目标。

问题

如何将这两个查询合并为一个查询,以找出这两条路径中是否存在一条?

如果可能的话,非常感谢您提供关于如何合并不同遍历查询的一般答案,并回答明确问题。

谢谢!

1个回答

5
尝试使用 unionAll。
select expand($c) 
let $a = ( SELECT EXPAND(out('E1').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>), 
$b = ( SELECT EXPAND(out('E1').out('E2').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>),
$c = unionAll( $a, $b )

您可以在以下链接中查看文档:http://orientdb.com/docs/2.1/SQL.html#select-from-multiple-targets

您真棒!正是我所需要的。不确定为什么在文档中错过了它。非常感谢! - dargolith
哦,为了正确性。结尾有一个多余的括号。否则它运行得很好! - dargolith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接