我可以调整此查询以摆脱fn:distinct-values吗?

时间:2014-04-09 14:34:05

标签: marklogic

有人可以告诉我是否可以通过删除fn:distinct-values($d2)表达式来改进此查询吗?

xquery version "1.0-ml";
declare namespace zespc = "http://www.cendris.nl/postcode";
declare namespace op = "http://www.nvsp.nl/oplage-mapping";

let $wijk := '665402'
let $d1 := fn:distinct-values(fn:doc('/data/map/oplage-mapping.xml')//op:map[@wijk_id = $wijk]/@ppc6_id)

let $q1 := cts:element-attribute-range-query(
      xs:QName("op:map"), xs:QName("wijk_id"), "=",
      $wijk)

let $d2 := cts:search(//op:map,$q1)/@ppc6_id
let $d3 := fn:distinct-values($d2)

return (fn:count($d1), fn:count($d3))

THX,

雨果

1 个答案:

答案 0 :(得分:0)

我不是100%确定你的目标是什么,但这应该返回相同的结果。您需要另一个属性范围索引,这次是op:map/@ppc6_id

注意整理,如果合适,请考虑使用数字类型。

xquery version "1.0-ml";
declare namespace zespc="http://www.cendris.nl/postcode";
declare namespace op="http://www.nvsp.nl/oplage-mapping";

let $wijk := '665402' (: Consider using integers instead of strings :)
let $q-wijk := cts:element-attribute-range-query(
  xs:QName("op:map"), xs:QName("wijk_id"),
  '=', $wijk)
let $ref-ppc := cts:element-attribute-reference(
    xs:QName('op:map'), xs:QName('ppc6_id'))
let $values-doc := cts:values(
  $ref-ppc, (),
  cts:and-query(
    (cts:document-query('/data/map/oplage-mapping.xml'),
     $q-wijk)))
let $values-all := cts:values($ref-ppc, (), $q-wijk)
return (count($values-doc), count($values-all))