如何组合OrientDB SQL SELECT语句中的字段

时间:2016-01-11 13:21:37

标签: orientdb

我有这个相当复杂的查询

SELECT FROM (
  SELECT EXPAND(INV()) FROM (
    SELECT FROM (
      SELECT EXPAND(OUTE('Streamed')) FROM (
        SELECT EXPAND(OUT('Follows')) FROM #12:3923
      )
    )
  )
)

可以描述为:

从@rid#12:3923这是一个User类,找到他关注的用户,看看他们有哪些Post(顶点)流(边缘)。

现在有了这个,如果可能的话,我还想拥有同一行中流式传输每个帖子的人的用户名(User.username)。

2 个答案:

答案 0 :(得分:6)

enter image description here

在参考这个小例子时,你的目标将从顶点' Alessandro'开始。跟随他的人[Luigi,Gabriele]已经流了下来 一些帖子[在这种情况下post1,post2]。这是对的吗?

修改 试试这个查询(这里提供了几行以便于阅读):

select username, myPost.name as postBody, myPost.postdate as postDate 
from (select username,out("Streamed") as myPost
      from (select EXPAND(OUT('Follows'))
            from #12:0)
      unwind myPost)

命令'放松'用于分离各个帖子的每一行,以便获得与表格最相似的视图。 (根据您的需要调整)。

查询的结果是: enter image description here

<强> EDIT_2 查询结果使用&#34; mypost。*&#34; enter image description here

答案 1 :(得分:0)

数据集是您需要合并的数据集。在您的情况下,首先是User.username,第二个是Post。

select expand($all) let
$a = (//your query for fetching User.username),
$b = (//your query for fetching Post),
$all = unionall($a, $b)

EDIT ::

嗯,作为替代方案,你可以尝试这样的事情:

select username, postName from (TRAVERSE out() from #12:3923 WHILE $depth <= 2)

然而,这并不能完全满足您的期望。结果将是两列,即用户名(来自您的用户顶点)和postName(来自您的Post顶点)。

使用username(s)为用户获得后跟给定的@rid,您将获得后续行中这些用户的所有相应Post顶点。相应的用户名列值将为空。

我认为Follows边缘来自用户,而Streamed边缘来自用户到帖子。