xquery - XQuery 3 合并两个节点序列和去重
问题描述
在 XQuery 3.1(在 eXistDB 4.4 下)我有两个函数,它们返回两组节点,描述一个人的家庭关系。这两个函数的结果可以重叠。
第一个函数person:person-relationship-as-object("#Guilhem_Faure_SML-AU")
返回:
<person relation="Peire_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Arnald_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Esteve_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Martin_de_Verazilh_SML-AU">
<span class="en">Aunt(s)/Uncle(s)</span>
<span class="fr">Tante(s)/Oncle(s)</span>
</person>
<person relation="Raimund_de_Verazilh_SML-AU">
<span class="en">Aunt(s)/Uncle(s)</span>
<span class="fr">Tante(s)/Oncle(s)</span>
</person>
第二个函数person:person-relationship-as-subject("#Guilhem_Faure_SML-AU")
返回
<person relation="Arnald_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Peire_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Esteve_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Bernarda_Guilhem_Faure_SML-AU">
<span class="en">Spouse(s)</span>
<span class="fr">Époux/épouse(s)</span>
</person>
现在我想将两组节点合并为一组,并且每个不同的节点只返回一次。
我尝试了一个粗略的类似 SQL 的结构,但失败了:
let $x := person:person-relationship-as-object("#Guilhem_Faure_SML-AU")
| person:person-relationship-as-subject("#Guilhem_Faure_SML-AU")
for $y in $x
order by $y/@relation ascending
group by $y/@relation, $y/span[@class="en"], $y/span[@class="fr"]
return $y
我不认为我真的明白为什么在group by
这里不起作用。此外,如果group by
不做这项工作,我还能如何处理(我认为?)应该是分组/不同结果的简单练习?
解决方案
使用 XQuery 和,您的子句中group by
的变量绑定到您创建的整个组,以便消除您需要使用的重复项。请参阅https://www.w3.org/TR/xquery-31/#id-group-by其中说$y
return
return $y[1]
在为给定组生成的分组后元组中,每个非分组变量都绑定到一个序列,该序列包含分配给该组的所有分组前元组中该变量的连接值。
接着
这种行为可能会让 SQL 程序员感到惊讶,因为 SQL 将非分组变量的等价物减少为一个代表值。
推荐阅读
- php - Readline 完成选项卡额外空间
- google-apps-script - .searchFiles() 迭代器返回“无效参数:q”错误
- python - 由于类型错误,Pandas 合并无法正常工作
- javascript - TypeScript:如何将属性添加到以字符串为标识符的类中
- asp.net - 使用 foreach 循环将项目动态添加到列表中
- asp.net-core-mvc - RouteData 属性重复
- python - 从 SQL 数据库获取数据后的 Pandas 内存问题
- python - 网页抓取时出现AttributeError
- ruby-on-rails - Rails 枚举防止 PG 中的破坏操作
- django - 带有多个扩展模板的 django 样式和 allauth