2

我正在检索数据并将其插入另一个文件。但是插入的数据没有排序。以下是我想要实现的示例。

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>

它没有被订购,虽然在检索时提到......!

4

2 回答 2

2

这是 BaseX 如何评估order byFLWOR 子句的一个错误,该子句现已记录在GitHub 错误跟踪器上。该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
于 2013-01-17T13:58:15.300 回答
0

这对我来说就像一个错误。规范说:

如果多个节点由单个插入表达式插入,它们的顺序将保留源表达式的节点顺序。

这不是很清楚,但我认为这意味着您有权期望结果得到正确排序。

您使用的是什么 XQuery Update 实现?

于 2013-01-17T08:31:07.440 回答