Gremlin相当于SQL'in'子句

时间:2013-10-22 06:28:10

标签: sql groovy gremlin

我正在尝试编写一个gremlin查询来查找具有另一个查询结果集中的值的所有节点,类似于SQL的'in'子句。

例如:

select * from myTable
where someVal in (select someVal from otherTable)

这个问题可能与this问题重复,但那里给出的答案不适用于我,因为我无法对我的图形进行线性扫描,因为我的IN子句的值是动态的结果。查询而不是静态列表。

1 个答案:

答案 0 :(得分:2)

您可能希望使用retain。您基本上存储第一个查询的结果,并将其用作retain步骤的输入,以便保留通过匹配管道的项目。一个简单的例子:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> firstResults = g.v(1).out.toList()
==>v[2]
==>v[4]
==>v[3]
gremlin> g.V.retain(firstResults)
==>v[3]
==>v[2]
==>v[4]

retain步骤通常与aggregate一起使用:

gremlin> x=[]
gremlin> g.v(1).out.aggregate(x).out.retain(x)
==>v[3]

或者您可以使用命名步骤:

gremlin> g.v(1).out.as('x').out.retain(x)
==>v[3]

要获得更多到Gremlin的SQL转换,您可以查看:SQLToGremlin.com