0
以下是XML文件 -的XQuery导致内存不足错误
<Info>
<Name>
<P1>Tomy</P1>
<P2>John</P2>
<R>P2</R>
</Name>
<Name>
<P1>Tomy</P1>
<P2>John</P2>
<R>P1</R>
</Name>
<Name>
<P1>Rojer</P1>
<P2>Messi</P2>
<R>P2</R>
</Name>
<Name>
<P1>Messi</P1>
<P2>Carl</P2>
<R>P2</R>
</Name>
<Name>
<P1>Messi</P1>
<P2/>
<R>P1</R>
</Name>
</Info>
P1
是球员1号和P2
是Player 2号,R
是本场比赛的结果。 我想用以下格式列出玩家的名字,并有不同的发生。
<P>Tomy V John</P>
<P>Rojer V Messi</P>
<P>Messi V John</P>
<P>Messi</P>
以下是解决方案,它提供了所需的输出 -
let $o := doc('sam')//Name
for $x in $o
let $p := if (string-length($x/P2/text()) > 0) then concat($x/P1/text(),' Vs. ',$x/P2/text()) else $x/P1/text()
for $y in $p
group by $y
order by $y
return <a>{$y}</a>
但此查询更好只适用于某些选定的记录。实际上,我有200000多条记录,当我执行这个查询时,我得到了内存不足错误。我使用的是BaseX 7.6。
如果我删除group by
子句,执行时没有错误,但它给出了错误的结果ie;具有重复的值。我需要独特的结果。
任何帮助?
非常感谢。你能解释我为什么得到OOM吗? – John
@John你只是在内存中有很多条目。您还可以从-Xmx = 1024mb(或任何适合的值)选项开始增加BaseX的内存。 – dirkk
@dirkk是的,这是可以做到的,但我认为我使用2'let'和2'for'使情况复杂化。答案中的查询工作正常。 – John