我一直在玩OrientDB关于Grateful Dead的默认数据库。
我很难从两个查询中获得相同的结果,这两个查询应该提供相同的结果。但他们没有。
查询1:
select from ( traverse in(sung_by) from #9:8 while $depth<=1 ) where type='song' order by @rid
这意味着:从给定节点开始,遍历距离不超过1个节点的所有“sung_by”传入边缘,扔掉起始顶点。
查询2:
select expand( in(sung_by) ) from #9:8 order by @rid
这意味着:从相同的给定顶点开始,相应地扩展到所有传入的'sung_by'边缘。
我认为这些查询必须返回相同的结果...但我在第4条记录中已经得到了不同的值。另外,如果一个人试图计算返回的记录总数,那么在前一种情况下将是148,在后一种情况下是150.
我做错了什么?提前谢谢。
修改:
我发现了问题,这很奇怪。它在'sung_by'的引号中。如果它存在,查询
select * from ( traverse in('sung_by') from #9:8 ) where type='song'
和
select expand( in('sung_by') ) from #9:8
提供完全相同的结果。
我不明白为什么它首先没有引号,其次我不明白选择了哪些记录。
答案 0 :(得分:0)
对于您的第二个查询,请尝试:
select from (select expand( in(sung_by) ) from #9:8) order by @rid
这意味着从#9:8
开始,并展开到所有传入的sung_by
边缘。现在保留此结果并按@rid
命令向我显示。
您的查询问题必须位于order by
部分。如果您将limit -1
放在查询的末尾(即,不带分页的所有结果),这一点就变得清晰了。然后,对于您的两个查询,结果应该相同。就像应用order by
和结果集时不太清楚,所以我们对内部查询变得更加明确。
答案 1 :(得分:0)
你可以尝试下面的第二个查询:
select expand(set(in(sung_by))) from #9:8 order by @rid