假设我有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中合并不同的遍历查询以及明确的答案的一般答案。)
谢谢!
答案 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