可以在SELECT语句中使用多个顶点集吗?

问题描述 投票:0回答:1

我想知道是否有任何方法可以在SELECT语句中使用多个顶点集。我认为应该可以,因为...为什么不呢?

例如,说我们有这个基本查询:

CREATE QUERY coolQuery(VERTEX<Foo> foo, String bar, String biz) FOR GRAPH cool_graph SYNTAX v2 {

  f = {foo};

  x = SELECT i
  FROM SomeVertex:i -(PathType1>)- f

  y = SELECT i
  FROM x:i -(<PathType2)- BarVertex:br
  WHERE br.id == bar;

  z = SELECT i
  FROM y:i -(PathType3>.PathType4>)- BizVertex:bz
  WHERE bz.id == biz;

  PRINT z;
}

现在,这很好而且很花哨,但是如果我知道ID为bar和biz的其他顶点怎么办?我可以在SELECT语句中使用多个已知顶点集吗?这里的目标是通过使用索引的顶点id值,尽快到达最终的SomeVertex集。

这是我的想法:

CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 {

  f = {foo};
  br = {bar};
  bz = {biz};

  x = SELECT i
  FROM SomeVertex:i -(PathType1>)- f

  y = SELECT i
  FROM x:i -(<PathType2)- br

  z = SELECT i
  FROM y:i -(PathType3>.PathType4>)- bz

  PRINT z;
}

我收到此语法错误,但在此类型的文档中找不到任何内容在SELECT语句中使用多个已知顶点集的情况。

graph-databases
1个回答
0
投票

第1版:

CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 { OrAccum<BOOL> @hasFoo, @hasBar, @hasBiz; f = {foo, bar, biz}; result = select t from f:s-((PathType1|PathType2|PathType3):e)-:t accum case when s == foo then t.@hasFoo += true end, case when s == bar then t.@hasBar += true end, case when s == biz then t.@hasBiz += true end having t.@hasFoo and t.@hasBar and t.@hasBiz; print result; }

第2版:

CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 { OrAccum<BOOL> @hasFoo, @hasBar, @hasBiz; f = {foo}; br = {bar}; bz = {biz}; fooSet = select t from f-(PathType1)-:t; barSet = select t from br-(PathType1)-:t; bizSet = select t from bz-(PathType1)-:t; result = fooSet intersect barSet intersect bizSet; print result; } 在这种情况下,建议使用1,因为它具有更好的并发性,并且仅执行一个SELECT。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.