有人可以告诉我是否可以通过删除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,
雨果
答案 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))