sql - 选择 "at least 2"XPath 表达式

标签 sql expression xquery

我需要编写一个 XPath 表达式来根据以下数据找到至少有 2 个供应商的城市(该表达式应该返回芝加哥和麦迪逊,因为它们每个都有 2 个供应商):

<SuppliersList>
  <Supplier name="Joe">
    <City>Paris</City>
    <Product name="Airplane"/>
    <Product name="Milk"/>
    <Product name="TV"/>
    <Product name="Orange"/>
 </Supplier>
  <Supplier name="Herman">
    <City>Chicago</City>
    <Product name="Orange"/>
 </Supplier>
 <Supplier name="Bernstein">
    <City>Madison</City>
    <Product name="Truck"/>
    <Product name="TV"/>
  </Supplier>
 <Supplier name="Hunter">
    <City>Wausau</City>
  </Supplier>
  <Supplier name="Mayer">
    <City>Madison</City>
  </Supplier>
  <Supplier name="Rosenfeld">
    <City>Chicago</City>
    <Product name="Computer"/>
    <Product name="Book"/>
    <Product name="Truck"/>
  </Supplier>
</SuppliersList>

任何帮助将不胜感激

最佳答案

//Supplier[City = following::Supplier/City]/City

解释:

  • 获取所有 Supplier 元素
    • 其中 City 元素等于当前节点 下方 的任何 Supplier/City 元素
  • 并取 City 元素

当然,这在 XSLT 模板中要容易得多

编辑

现在我看到您使用的是 XQuery,而不是 XPath:

DECLARE @x xml
SET @x = '
<SuppliersList>
  <Supplier name="Joe">
    <City>Paris</City>
    <Product name="Airplane"/>
    <Product name="Milk"/>
    <Product name="TV"/>
    <Product name="Orange"/>
 </Supplier>
  <Supplier name="Herman">
    <City>Chicago</City>
    <Product name="Orange"/>
 </Supplier>
 <Supplier name="Bernstein">
    <City>Madison</City>
    <Product name="Truck"/>
    <Product name="TV"/>
  </Supplier>
 <Supplier name="Hunter">
    <City>Wausau</City>
  </Supplier>
  <Supplier name="Mayer">
    <City>Madison</City>
  </Supplier>
  <Supplier name="Rosenfeld">
    <City>Chicago</City>
    <Product name="Computer"/>
    <Product name="Book"/>
    <Product name="Truck"/>
  </Supplier>
</SuppliersList>'
SELECT @x.query('
    let $cities := //City
    for $city in distinct-values($cities)
        where count($cities[. eq $city]) >= 2
        return $city
    ')

关于sql - 选择 "at least 2"XPath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852904/

相关文章:

mysql - 如何从两个不同的表中获取数据(没有重复记录)?两个表都有共同的值(value)

operators - = 和 != 的语义

sql - 引用外部表时从子查询连接 TOP 1

c# - 如何解压表达式树并检查空值

c# - 使用最小起订量验证表达式参数

python - Python 中的列表/元组切片语法中是否存在某种表达式求值?

xquery - XQuery中的element()与node()

xpath - 使用XQuery/XPath获取元素的父节点的属性值

php - 选择字段不为空的数据

mysql - 在 SELECT … INNER JOIN … FOR UPDATE 的情况下,字符串的顺序会被锁定,以及如何避免死锁?