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

How to combine fields in OrientDB SQL SELECT statement

我有这个相当复杂的查询

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

可以描述为:

从@rid #12:3923 是一个用户 class,找到他关注的用户并查看他们对哪个 Post(顶点)进行了流式处理(边)。

现在有了这个,如果可能的话,我还想从流式传输每个 Post 的人那里获得用户名 (User.username)。

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

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

编辑::

好吧,作为替代方案,您可以尝试这样的操作:

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

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

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

我假设 Follows 边是从用户到用户,Streamed 边是从用户到 Post。

参考这个小例子,你的目标将从顶点开始导出 'Alessandro' 关注他的人 [Luigi, Gabriele] 已经流过 一些 post [在这种情况下 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)

命令 'unwind' 用于分隔各种 post 的每一行,以便获得与 table 最相似的视图。 (根据您的需要进行调整)。

查询结果为:

EDIT_2 使用 "mypost.*" 的查询结果