1

我试图在 Wikidata 查询服务中执行以下查询。

SELECT ?s ?birthyear
WHERE {
   SELECT ?s ?birthyear
   WHERE {
     ?s wdt:P27 wd:Q837 .
     ?s wdt:P106 wd:Q33999 .
     ?s wdt:P569 ?dateOfBirth .
     BIND(YEAR(?dateOfBirth) as ?birthyear) 
   }
   order by asc(?birthyear) asc(?s)   
}

我期待按出生年份(升序)排序,如果有人有相同的出生年份,然后按主题对它们进行排序,但它显示的是随机顺序。在外部查询中也可以正常工作。问题仅在内部查询中可见。这是预期的行为还是我错过了什么?

4

1 回答 1

0

spraql 不需要将内部选择的结果顺序投影并维护到外部选择的结果中。如果要对结果进行排序,则应将 order by 移至外部选择。至于为什么你会得到无序的结果,我猜查询引擎足够聪明,可以识别内部 order by 不会影响最终结果并且可以优化它。

更新:您可以从 wikidata中获取查询计划,因此查看它确实执行内部排序,但最终通过哈希集运行结果,然后将破坏迭代顺序。

于 2021-09-22T18:27:42.413 回答