Как объединить поля в инструкции OrientDB SQL SELECT


У меня есть этот довольно сложный запрос

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

Который можно описать следующим образом:

Из класса @ rid #12:3923, который является пользовательским классом, найдите пользователей, которым он следует, и посмотрите, какой пост (вершина) они передали (ребро).

Теперь с этим, я также хотел бы иметь имя пользователя (User.имя пользователя) от человека, который транслировал каждый пост в одной строке, если это возможно.

2   2   2016-01-11 16:21:37

2 ответа:

Введите описание изображения здесь

В отношении этого небольшого примера ваша цель будет выведена, начиная с вершины "Алессандро", люди, которые следуют за ним [Луиджи, Габриэле], которые потоком некоторые сообщения [в данном случае post1, post2]. это правильно?

EDIT Попробуйте выполнить этот запрос (представленный здесь в нескольких строках для удобства чтения):

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)
Команда "размотать" служит для разделения каждой строки различных постов таким образом, чтобы получить вид наиболее похожий на таблицу. (Регулировать это в соответствии с вашими потребностями).

Результатом запроса является: Введите описание изображения здесь

EDIT_2 Результат запроса с использованием "mypost.*" Введите описание изображения здесь

Наборы данных-это те, которые вам нужно объединить. В вашем случае первым будет Пользователь.имя пользователя и второй будет пост.

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)
Это, однако, не даст вам именно то, что вы ожидали. Результатом будет два столбца, а именно username(из вашей пользовательской вершины) и postName(из вашей почтовой вершины).

С помощью username (s), которые вы получаете для пользователей, за которыми следует given @rid, вы получите все соответствующие вершины записей этих пользователей в последующих строках. И соответствующие значения столбца username будут пустыми.

Я предположил, что ребро Follows идет от пользователя к пользователю, а ребро Streamed - от пользователя к сообщению.