首页 > 解决方案 > XQuery 产生不正确的输出

问题描述

示例 xml 如下所示:

<sales>
............
     <customer custid="108">
        <name>NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER</name>
        <address>98 LONE PINE WAY</address>
        <city>HIBBING</city>
        <state>MN</state>
        <zip>55649</zip>
        <area>612</area>
        <phone>566-9123</phone>
        <repid>7844</repid>
        <creditlimit>8000</creditlimit>
        <ord ordid="613">
            <orderdate>1987-02-01</orderdate>
            <shipdate>1987-02-01</shipdate>
            <total>6400</total>
            <item itemid="1">
                <product_ref ref="100871"/>
                <actualprice>5.6</actualprice>
                <qty>100</qty>
                <itemtot>560</itemtot>
            </item>
        </ord>
    </customer>
    <product prodid="100860">
        <descrip>ACE TENNIS RACKET I</descrip>
        <price>
            <stdprice>35</stdprice>
            <minprice>28</minprice>
            <startdate>1986-06-01</startdate>
        </price>
    </product>
.........
</sales>
let $product := doc('sales.xml')/sales/product
for $item in doc('sales.xml')/sales/customer/ord/item
where $item/actualprice < $product[@prodid=$item/product_ref/@ref]/price/minprice
return $item

结果我得到:

<item itemid="1">
    <product_ref ref="100861"/>
    <actualprice>35</actualprice>
    <qty>1</qty>
    <itemtot>35</itemtot>
</item>
<item itemid="3">
    <product_ref ref="101863"/>
    <actualprice>10</actualprice>
    <qty>150</qty>
    <itemtot>1500</itemtot>
</item>
<item itemid="7">
    <product_ref ref="101863"/>
    <actualprice>12.5</actualprice>
    <qty>200</qty>
    <itemtot>2500</itemtot>
</item>
<item itemid="5">
    <product_ref ref="101863"/>
    <actualprice>9</actualprice>
    <qty>100</qty>
    <itemtot>900</itemtot>
</item>

但是 ref=101863 的项目是不对的。只有 id=5 的项目小于 minprice。为什么会出现这个错误?尝试了很多不同的查询,但它总是给我相同的结果。它适用于 ref=100861。

标签: xquery

解决方案


假设查询不支持模式,您将两个价格作为字符串而不是数字进行比较。在比较之前,您需要将两者都转换为数字。


推荐阅读