【问题标题】:SELECT EXPAND vs TRAVERSESELECT EXPAND 与 TRAVERSE
【发布时间】:2015-05-18 15:02:21
【问题描述】:

我一直在使用 OrientDB 关于 Grateful Dead 的默认数据库。

我正在努力从两个应该提供相同结果的查询中获得相同的结果。但他们没有。

查询 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。

我做错了什么?提前致谢。

编辑

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

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

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

提供完全相同的结果。

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

【问题讨论】:

    标签: sql orientdb


    【解决方案1】:

    对于您的第二个查询,试试这个:

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

    这意味着从#9:8 开始并扩展到所有传入的sung_by 边。现在保留这个结果并显示给我,由@rid订购。

    您的查询问题一定出在order by 部分。如果您将limit -1 放在查询的末尾,这一点就会变得很清楚(也就是说,所有结果都没有分页)。那么您的两个查询的结果应该是相同的。好像还不清楚何时应该应用 order by 以及应用于什么结果集,所以我们通过内部查询变得更加明确。

    【讨论】:

      【解决方案2】:

      你能试试你的第二个查询吗:

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

      【讨论】:

        猜你喜欢
        • 2015-04-04
        • 2015-07-30
        • 2013-12-23
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        相关资源
        最近更新 更多