2012-01-25 54 views
2

我不知道我在做什麼錯誤,但我試圖通過使用「where」來設置兩個條件,並且它們各自獨立工作,但是當我將它們組合時,每個文件的轉儲。如何結合xQuery中的where子句

如果我只是有:

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

我得到兩個清單,因爲有兩種類型(一& 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 

我得到的所有文件。爲什麼它不只是給我帶有我指定的名稱和類型的單個文件?這似乎是我錯過了一些明顯的東西!

+0

可能是因爲您正在使用的解析器沒有正確地尊重運算符優先級。你是否嘗試在括號中包含'和'運算符的左右手操作數,像這樣:'($ i // type =「a」)和($ i // lastname =「Smith」)'? – grtjn

回答

0

你的查詢看起來對我來說是正確的(我試過用BaseX)。這可能是因爲你的XQuery處理器做錯了;您正在使用哪種XML/XQuery引擎?

+0

我正在使用eXist – user1088443

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

存在,但db是更加高效。請你能試試嗎?