如何在xQuery中组合Where子句

时间:2012-01-25 21:50:19

标签: xquery

我不确定我在这里做错了什么,但是我试图通过使用“where”设置两个条件,它们各自单独工作,但是当我将它们组合起来时,我得到了每个文件的转储。

如果我只是:

for $i in collection("/db/people")
where $i//lastname="Smith"
return $i

我有两个列表,因为有两种类型(a& b)。

如果我有

for $i in collection("/db/people")
where $i//type="a"
return $i

我得到了538个列表,这些都是“a”类型的所有内容。

但是,如果我有:

for $i in collection("/db/people")
where  $i//type="a" and $i//lastname="Smith"
return $i

我收到了所有文件。为什么不给我一个具有我指定的名称和类型的单个文件?好像我错过了一些明显的东西!

3 个答案:

答案 0 :(得分:4)

您可以在http://try.zorba-xquery.com/上尝试解决方案,它运行正常。 例如:

let $people := (<people><type>a</type><lastname>Smith</lastname></people>, <people><type>a</type><lastname>Foobar</lastname></people>)
for $i in $people
where  $i//type="a" and $i//lastname="Smith"
return $i

答案 1 :(得分:0)

您的查询对我来说是正确的(我已经尝试过使用BaseX)。可能是你的XQuery处理器做错了什么;您正在使用哪种XML / XQuery引擎?

答案 2 :(得分:-1)

使用谓词过滤器而不是'where'子句时,eXist-db效率更高。你能试试吗?