以下是 XML 文件 -
<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
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
子句,则执行没有错误,但它给出了错误的结果,即;具有重复值。我需要不同的结果。
有什么帮助吗?