2012-01-25 5 views
2

나는 여기서 내가 잘못하고있는 것이 확실하지 않지만 "어디에서"사용하여 두 가지 조건을 설정하려고 노력하고 있습니다. 모든 파일의 덤프.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 

이있는 경우

나는 "A"타입의 모든 것 (538 개) 목록을 얻을.

그러나, 나는이있는 경우 :

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

나는 모든 파일을 얻을. 왜 내가 지정한 이름과 유형의 단일 파일을 제공하지 않는 것일까 요? 내가 명백한 것을 놓치고있는 것처럼 보인다!

+0

사용중인 파서가 연산자 우선 순위를 올바르게 준수하지 않을 수 있습니다. '($ i // type = "a")와 ($ i // lastname = "Smith")'와 같이 괄호 안에 'and'연산자의 왼쪽과 오른쪽 연산자를 래핑하려고 했습니까? – grtjn

답변

0

귀하의 검색어가 정확합니다 (저는 BaseX로 시도했습니다). XQuery Processor가 잘못된 동작을했을 수도 있습니다. 어떤 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 훨씬 더 효율적이다. 시도해 볼 수 있니?

관련 문제