【发布时间】: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, ?sk0和SELECT ?x, ?sk0,都是一致的,搞得我一头雾水 -
@shawnt00 您能否通过发布答案使其更详细?那我可以接受你的回答。非常感谢!