XQuery查询异常:按作者和年份筛选无法正确获取对应Price值
解决XQuery中根据作者和年份匹配对应Price的问题
我来帮你搞定这个问题!你当前的查询之所以返回所有Price值,是因为你的条件判断没有精准定位到同一个book节点上——你现在的逻辑是检查<_1>节点下存在任意一本年份为2009的书,并且存在任意一本作者是Vaidyanathan Nagarajan的书,所以整个<_1>节点被选中,自然会返回它下面所有book的Price。
修正方案1:直接遍历目标book节点
把循环对象从/root/*改成/root/*/book,直接针对每一本book做条件判断,符合条件的才返回它的Price:
for $book in /root/*/book where $book/year='2009' and $book/author='Vaidyanathan Nagarajan' return fn:data($book/price)
修正方案2:用谓词精准过滤同一book节点
如果还是想保留遍历/root/*的结构,可以在book节点上用谓词同时匹配年份和作者,确保是同一本书:
for $record in /root/* let $targetBook := $record/book[year='2009' and author='Vaidyanathan Nagarajan'] where exists($targetBook) return fn:data($targetBook/price)
两种方案运行后都会返回你期望的结果:50,它们的核心都是确保年份和作者的条件同时作用于同一个book节点,而不是分别匹配不同的book。
内容的提问来源于stack exchange,提问作者Anjit Sharma
相关产品推荐
相关产品推荐

