如何在OrientDB

时间:2015-11-19 16:12:46

标签: sql orientdb

假设我有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>

我唯一感兴趣的是知道两条路径中是否存在其中一条。我想用一个查询来做这个。

问题

如何将这两个查询合并到一个查询中,以确定两个路径中是否存在其中一个?

(如果可能的话,将非常感谢如何在OrientDB中合并不同的遍历查询以及明确的答案的一般答案。)

谢谢!

1 个答案:

答案 0 :(得分: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