为什么 DISTINCT 关键字导致这两个查询的实体不同?
Why DISTINCT keyword lead to different entity for these two queries?
查询 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
子句,您应该会看到两个查询之间的一致结果。
查询 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
子句,您应该会看到两个查询之间的一致结果。