簡體   English   中英

Xquery中是否有SELECT WHERE…IN等效項?

[英]Is there a SELECT WHERE… IN equivalent in Xquery?

我是Xquery的新手,很難解決這個問題。 基本上,我當前的XML文件的結構是這樣的:

<root>
   <a>
      <aid>XX</aid>
      ...
   </a>
   <a>
      <aid>xx</aid>
      ...
   </a>
   <b>
      <bid>xx</bid>
      ...
   </b>
   <b>
      <bid>xx</bid>
      ...
   </b>
...
</root>

我想要得到的是b元素的信息,這些元素的“出價” 不等於 a元素中的任何 “援助”。 我試圖這樣做。 首先,我讓一個變量來保存幫助:

let $aid := (xpath to the aid elements)

然后我嘗試從傳統sql進行類似“ SELECT WHERE IN”的操作。 即:

for $b in (xpath to b elements)

where $b/bid != $aid (我試圖達到NOT IN效果)

return $b/(infomation)

但是問題是我找不到正確的方法來執行此操作。 我也試過

where $e/bid != $aid[*]

,它也不起作用。 那我走錯了軌道嗎? 無論如何在Xquery(1.0)中實現了這一點? 還是有其他方法來獲取所需的信息?

b個元素的“出價”不等於a元素中的任何“援助”。

最直接的方法是

for $b in //b
where not(exists(//a[aid = $b/bid]))
return $b

我不確定在您的設置中是否可以使用以下XPath方法。 跟隨XPath

//b/bid[not(./text() = //a/aid/text())]/text()

當應用於示例XML時

<root>
  <a>
    <aid>XX</aid>
  </a>
  <a>
    <aid>YY</aid>
  </a>
  <b>
    <bid>XX</bid>
  </b>
  <b>
    <bid>YY</bid>
  </b>
  <b>
    <bid>ZZ</bid> 
  </b>
</root>

返回ZZ
正如您提到的那樣,您想從b節點獲取所有bid信息不等於任何aid值的信息,我假設您有更多的ab節點子節點。 要獲得匹配的b節點以及XPath之后的所有子節點

//b[bid[not(./text() = //a/aid/text())]]

當應用於擴展示例XML時

<root>
  <a>
    <aid>XX</aid>
    <more>more a XX</more>
  </a>
  <a>
    <aid>YY</aid>
    <more>more a YY</more>
  </a>
  <b>
    <bid>XX</bid>
    <more>more b XX</more>
  </b>
  <b>
    <bid>YY</bid>
    <more>more b YY</more> 
  </b>
  <b>
    <bid>ZZ</bid>
    <more>more b ZZ</more>
  </b>
</root>

退貨

<b>
  <bid>ZZ</bid>
  <more>more b ZZ</more>
</b>

=運算符實際上在XQuery中進行成員資格測試。

從而,

a = ('foo', 'bar', 'baz', 'qux')

實際上測試afoobarbaz還是qux 任何 a

因此,它只是與WHERE IN等效的標准相等運算符,在一側提供了序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM