Как объединить предложения Where в xQuery - PullRequest
2 голосов
/ 26 января 2012

Я не уверен, что я делаю здесь неправильно, но я пытаюсь установить два условия с помощью «где», и каждый из них работает по отдельности, но когда я объединяю их, я получаю дамп каждого файла.

Если у меня просто есть:

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 ]

4 голосов
/ 27 января 2012

Вы можете попробовать свое решение на 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
0 голосов
/ 27 января 2012

eXist-db намного более эффективен при использовании фильтров предикатов вместо предложения where.Пожалуйста, не могли бы вы попробовать это?

0 голосов
/ 26 января 2012

Ваш запрос мне кажется правильным (я пробовал его с BaseX).Возможно, ваш XQuery Processor делает что-то не так;какой движок XML / XQuery вы используете?

...