Как объединить результаты двух запросов в OrientDB

Допустим, у меня есть 4 класса вершин: V1, V2, V3, V4, а также 3 класса ребер: E1, E2, E3.

Затем их экземпляры (возможно) связаны следующим образом:

V1 --E1--> V2
V2 --E2--> V3
V2 --E3--> V4
V3 --E3--> V4

Итак, графически что-то вроде:

V1---E1---V2
          |   \
          E2    E3
          |        \
          V3---E3---V4

С направлениями, показанными выше.

Теперь меня интересуют пути по точным ребрам, показанным от V1 до V4 (между ними могут быть и другие ребра, о которых мы не знаем, поэтому подходят только уже упомянутые типы ребер).

Чтобы проверить, существует ли один из путей от V1 до V4 (скорее будет возвращен V4, если путь существует):

SELECT EXPAND(out('E1').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>

Чтобы проверить, существует ли другой путь (скорее будет возвращен V4, если путь существует):

SELECT EXPAND(out('E1').out('E2').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>

Единственный интерес, который у меня есть, это знать, существует ли ОДИН из двух путей. Я хотел бы сделать это с помощью одного запроса.

Вопрос

Как я могу объединить эти два запроса в один запрос, чтобы узнать, существует ли один из двух путей?

(Если возможно, был бы весьма признателен общий ответ на вопрос о том, как объединить различные запросы обхода в OrientDB вместе с явным ответом.)

Спасибо!


person dargolith    schedule 19.11.2015    source источник


Ответы (1)


Попробуйте с unionAll

select expand($c) 
let $a = ( SELECT EXPAND(out('E1').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>), 
$b = ( SELECT EXPAND(out('E1').out('E2').out('E3')) FROM V1 WHERE id = <someIdThatV1Has>),
$c = unionAll( $a, $b )

Вы можете просмотреть документацию по следующей ссылке http://orientdb.com/docs/2.1/SQL.html#select-from-multiple-targets

person Alessandro Rota    schedule 19.11.2015
comment
Вы, сэр, потрясающие. Именно то, что мне было нужно. Не уверен, как я пропустил это в документации. Большое спасибо! - person dargolith; 19.11.2015
comment
О, для корректности. В конце одна скобка лишняя. В остальном работает отлично! - person dargolith; 19.11.2015