Sql 选择展开与遍历

Sql 选择展开与遍历,sql,orientdb,Sql,Orientdb,我一直在玩OrientDB关于感恩死亡的默认数据库 我正在努力从两个应该提供相同结果的查询中获得相同的结果。但事实并非如此 问题1: select from ( traverse in(sung_by) from #9:8 while $depth<=1 ) where type='song' order by @rid 这意味着:从相同的给定顶点开始,相应地展开到所有传入的“sung_by”边 我想这些查询必须返回相同的结果。。。但是我在第四个记录中已经得到了一个不同的值。此外,如果您

我一直在玩OrientDB关于感恩死亡的默认数据库

我正在努力从两个应该提供相同结果的查询中获得相同的结果。但事实并非如此

问题1:

select from ( traverse in(sung_by) from #9:8 while $depth<=1 ) where type='song' order by @rid
这意味着:从相同的给定顶点开始,相应地展开到所有传入的“sung_by”边

我想这些查询必须返回相同的结果。。。但是我在第四个记录中已经得到了一个不同的值。此外,如果您试图计算返回的记录总数,那么在前一种情况下,返回的记录总数将为148,在后一种情况下,返回的记录总数将为150

我做错了什么?提前谢谢

编辑:

我发现了问题,这很奇怪。在“sung_by”的引号中。如果它存在,请查询

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

提供完全相同的结果


我不明白为什么它运行时没有引号,其次我也不知道选择了哪些记录。

对于第二个查询,请尝试以下操作:

选择从选择展开按从9:8按@rid排序

这意味着从9:8开始,通过边缘扩展到所有传入的sung_。现在保留这个结果,并按@rid的顺序显示给我


您的查询的问题必须是按零件排序的。如果将limit-1放在查询的末尾,即不分页地显示所有结果,那么这一点就变得很清楚了。然后,两个查询的结果应该相同。好像什么时候应该应用order by以及应用到什么结果集还不太清楚,所以我们可以更明确地使用内部查询。

您可以尝试下面的第二个查询吗:

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