SPARQL查询中UNION和EXISTS过滤器之间的区别是什么
我正在进行实验,并且注意到使用UNION或EXISTS过滤器进行类似查询之间的差异SPARQL查询中UNION和EXISTS过滤器之间的区别是什么,sparql,dbpedia,Sparql,Dbpedia,我正在进行实验,并且注意到使用UNION或EXISTS过滤器进行类似查询之间的差异 SELECT (COUNT(?w1) as ?nbWriter) WHERE { ?w1 a dbo:Writer; dbo:spouse ?w2 . FILTER ( EXISTS {?w2 a dbo:Writer} || EXISTS {?w2 a yago:AmericanNovelists.} ) } 生成结果nbWriters=371 while查询 SELECT (COU
SELECT (COUNT(?w1) as ?nbWriter) WHERE {
?w1 a dbo:Writer;
dbo:spouse ?w2 .
FILTER ( EXISTS {?w2 a dbo:Writer} || EXISTS {?w2 a yago:AmericanNovelists.} )
}
生成结果nbWriters=371
while查询
SELECT (COUNT(?w1) as ?nbWriter) WHERE {
?w1 a dbo:Writer;
dbo:spouse ?w2 .
{?w2 a dbo:Writer.}
UNION
{?w2 a yago:AmericanNovelists.}
}
生成结果nbWriters=414
为什么这两个查询之间存在差异?它们是否不相等(参见前面的问题和答案) 第二个查询不统计不同的写入程序。例如,它计数四次,因为:
DISTINCT
,都会得到正确答案(364):
一般来说,要找出这些查询中错误的原因,请列出所有结果,而不是仅仅计算它们。这个问题令人困惑。他们给出了不同的结果,还是相同的结果(都是371)?是的,我犯了一个错误。他们给出了不同的结果。第一个给出371,第二个给出414。请在
w1
上使用不同的,然后两者都返回相同的结果。诊断正确。我会投票支持最后一句话:一两分钟的调试可以节省提问和等待堆栈溢出答案的时间。Joshua和svick是对的,我应该在发布此问题之前进行更多测试。
SELECT (COUNT(DISTINCT ?w1) as ?nbWriter)