Orient SQL - 使用 WHERE 过滤结果集?
Orient SQL - Filter result set using WHERE?
我有一些关于 Orient SQL 查询的语义问题。
以这个非常简单的图形为例:
v(#12:1 User) --> e(#13:1 FriendOf) --> v(#12:2 User)
换句话说,删除了#12:1 的给定用户是另一个删除了#12:2 的用户的朋友。
要获得用户#12:1 的好友,可以用东方语言 SQL 表达如下:
SELECT EXPAND(both("FriendOf")) FROM #12:1
此查询将 return 一个结果列表,其中包含删除了 #12:2 的用户。
现在假设我想按附加条件过滤该结果列表,例如数值 ("age"):
SELECT EXPAND(both("FriendOf")) FROM #12:1 WHERE age >= 10
以上查询将过滤当前顶点 (#12:1),而不是结果集。这是有道理的,但是有没有办法将过滤器应用于 EXPAND(both("FriendOf")) 结果而不是当前顶点?我知道我可以像这样用 gremlin 做到这一点:
SELECT EXPAND(gremlin('current.both("FriendOf").has("age",T.gte,10)')) FROM #12:1
但是上面好像没有使用索引(至少我问它解释的时候没有)。对于非常大的数据集,这是有问题的。
那么有没有合适的方法将 WHERE 语句应用于结果数据集?
谢谢!
... is there a way to apply the filter to the EXPAND(both("FriendOf")) result rather than the current vertex?
简单的答案是将您的基本 "SELECT EXPAND ..." 嵌入另一个 SELECT,即
SELECT FROM (SELECT EXPAND(both("FriendOf")) FROM #12:1) WHERE age >= 10
顺便说一下,在我的 Mac 上,上面的代码用了 0.005 秒,而 Gremlin 版本用了超过 2 秒。那里一定有道德:-)
我有一些关于 Orient SQL 查询的语义问题。
以这个非常简单的图形为例:
v(#12:1 User) --> e(#13:1 FriendOf) --> v(#12:2 User)
换句话说,删除了#12:1 的给定用户是另一个删除了#12:2 的用户的朋友。
要获得用户#12:1 的好友,可以用东方语言 SQL 表达如下:
SELECT EXPAND(both("FriendOf")) FROM #12:1
此查询将 return 一个结果列表,其中包含删除了 #12:2 的用户。
现在假设我想按附加条件过滤该结果列表,例如数值 ("age"):
SELECT EXPAND(both("FriendOf")) FROM #12:1 WHERE age >= 10
以上查询将过滤当前顶点 (#12:1),而不是结果集。这是有道理的,但是有没有办法将过滤器应用于 EXPAND(both("FriendOf")) 结果而不是当前顶点?我知道我可以像这样用 gremlin 做到这一点:
SELECT EXPAND(gremlin('current.both("FriendOf").has("age",T.gte,10)')) FROM #12:1
但是上面好像没有使用索引(至少我问它解释的时候没有)。对于非常大的数据集,这是有问题的。
那么有没有合适的方法将 WHERE 语句应用于结果数据集?
谢谢!
... is there a way to apply the filter to the EXPAND(both("FriendOf")) result rather than the current vertex?
简单的答案是将您的基本 "SELECT EXPAND ..." 嵌入另一个 SELECT,即
SELECT FROM (SELECT EXPAND(both("FriendOf")) FROM #12:1) WHERE age >= 10
顺便说一下,在我的 Mac 上,上面的代码用了 0.005 秒,而 Gremlin 版本用了超过 2 秒。那里一定有道德:-)