2015-05-18 4 views
1

Я играл с базой данных OrientDB о Grateful Dead.SELECT EXPAND vs TRAVERSE

Я изо всех сил пытаюсь получить равные результаты из двух запросов, которые должны доставить тот же результат. Но они этого не делают.

запрос 1:

select from (traverse in(sung_by) from #9:8 while $depth<=1) where type='song' order by @rid 

это означает: начать с данного узла, пройти через все «sung_by» входящих ребер не дальше, чем 1 узел прочь, выбрасывайте начиная вершину.

запрос 2:

select expand(in(sung_by)) from #9:8 order by @rid 

это означает: начать с одной и той же данной вершины, расширить соответствующим образом для всех входящих '' sung_by краев.

Я полагаю, что эти запросы должны возвращать тот же результат ... но я получаю другое значение уже на 4-й записи. Кроме того, если попытаться вычислить общее количество возвращенных записей, то в первом случае это будет 148, а в последнем - 150.

Что я делаю неправильно? Заранее спасибо.

EDIT:

я нашел эту проблему, и это странно. это в кавычках «sung_by». если он присутствует, запрашивает

select * from (traverse in('sung_by') from #9:8) where type='song' 

и

select expand(in('sung_by')) from #9:8  

поставить точно такой же результат.

Я не понимаю, почему он работал без кавычек в первую очередь, а во-вторых, я не понимаю, какие записи были выбраны.

ответ

0

Для вашего 2-го запроса попробовать это:

select from (select expand(in(sung_by)) from #9:8) order by @rid

Это означает, что начиная с #9:8 и расширить на все входящие sung_by края. Теперь сохраните этот результат и покажите его мне, указанному @rid.

Проблема с вашим запросом должна быть у части order by. Это становится понятным, если вы положили limit -1 в конце вашего запроса (то есть принесите все результаты без разбивки на страницы). Затем результаты должны быть одинаковыми для обоих ваших запросов. Это похоже на то, что не так ясно, когда нужно применять order by и к какому результирующему набору, чтобы мы стали более явными с внутренним запросом.

0

вы можете попробовать свои 2-й запрос, как показано ниже:

select expand(set(in(sung_by))) from #9:8 order by @rid