我正在检索数据并将其插入另一个文件中。但是插入的数据没有排序。以下是我想要实现的例子。
let $n := <N>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
<n>Orange</n>
<n>Pineapple</n>
<n>Apple</n>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
</N>
for $x in distinct-values($n/n)
order by $x
return
insert node <n>{$x}</n> into doc('fruits')/fruit
fruits
的输出如下 -
<fruit>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
<n>Orange</n>
<n>Pineapple</n>
<n>Apple</n>
</fruit>
虽然在检索时提到了...... !!!
答案 0 :(得分:2)
这是BaseX如何评估order by
FLWOR子句的错误,现在GitHub bug tracker记录了该子句。在排序之前评估return
子句而不是后记,从而以错误的顺序添加更新。
解决方法是在另一个FLWOR表达式中进行排序:
for $x in
for $d in distinct-values($n/n)
order by $d
return $d
order by $x
return
insert node <n>{$x}</n> into doc('fruits')/fruit
另一个(可能更优雅)解决方案是使用insert nodes
,只需要评估一次:
insert nodes
for $x in distinct-values($n/n)
order by $x
return <n>{$x}</n>
into doc('fruits')/fruit
答案 1 :(得分:0)
这对我来说感觉像个错误。规范说:
如果单个插入表达式插入了多个节点,则它们的顺序会保留源表达式的节点顺序。
这不完全清楚,但我认为这意味着您有权期望对结果进行适当的排序。
您使用的是什么XQuery Update实现?