【问题标题】:Why DISTINCT keyword lead to different entity for these two queries?为什么 DISTINCT 关键字导致这两个查询的实体不同?
【发布时间】:2021-03-07 22:08:16
【问题描述】:

查询 1

PREFIX ns: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?x
WHERE {
FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))
?x ns:type.object.type ns:religion.religious_leadership_title .
?x ns:religion.religious_leadership_title.leaders ?c0 .
?c0 ns:religion.religious_organization_leadership.start_date ?sk0 .
}
ORDER BY ?sk0
LIMIT 1

查询 2

PREFIX ns: <http://rdf.freebase.com/ns/>
SELECT ?x
WHERE {
FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))
?x ns:type.object.type ns:religion.religious_leadership_title .
?x ns:religion.religious_leadership_title.leaders ?c0 .
?c0 ns:religion.religious_organization_leadership.start_date ?sk0 .
}
ORDER BY ?sk0
LIMIT 1

所以Q1和Q2唯一的区别就是Q1中SELECT ?x时有一个DISTINCT关键字。但是,Q1 给出答案 m.01h_90,而 Q2 给出答案 m.05rd8。 理想情况下,我觉得这不应该导致不同的结果,因为DISTINCT 的目的只是在我理解正确的情况下去除结果集中的重复项,所以如果原始结果根本没有重复项,应该添加 DISTINCT 关键字没有任何区别。

【问题讨论】:

  • 您订购的价值必须相同。指定 distinct 会导致不同的计划对行进行不同的排序。将该列添加到order by,看看是否一致。
  • @shawnt00 完全正确。我试了SELECT DISTINCT ?x, ?sk0SELECT ?x, ?sk0,都是一致的,搞得我一头雾水
  • @shawnt00 您能否通过发布答案使其更详细?那我可以接受你的回答。非常感谢!

标签: sparql freebase


【解决方案1】:

您订购的价值是平局的。指定 distinct 会导致不同的执行计划对行进行不同的排序,但仍按请求的一列排序,另一行作为输出的第一行。将输出列添加到order by 子句,您应该会看到两个查询之间的一致结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多