SQL,xQuery:查找重复项

时间:2012-12-05 09:57:04

标签: sql xquery xquery-sql

我对SQL和xpath有一定的了解,但没有xquery。我如何编写查询以获取所有记录,其中一个字段中包含的XML具有同一元素的两个实例,这两个实例还包含子元素的匹配数据。

让我举例说明:

表:Fred
表格字段:id, time, xmlone, xmltwo.
我想在此表中查找xmlone具有以下内容的所有记录:

<!--xmlstart-->
<!--...any number of elements-->
<elementone position="1">
  <subelea>2010-01-01</subelea>
  <subeleb>hg72</subeleb>
  <subelec>George</subelec>
</elementone>
<!--...any number of elements here (may not end at same level)-->
    <elementone position="2">
      <subelea>2010-01-01</subelea>
      <subeleb>hg72</subeleb>
      <subelec>John</subelec>
    </elementone>
<!--xmlend-->

注意我只想要subeleasubeleb匹配的匹配项。此外,可能还有elementone的重复项,但除非subeleasubeleb的数据匹配,否则我并不关心。

1 个答案:

答案 0 :(得分:1)

(: Self-join on all <elementone/> :)
for $i in //elementone, $j in //elementone
where $i != $j
(: Compare `$i` and `$j` on the subelements that should be equal (or whatever) :)
and $i/subelea eq $j/subelea
and $i/subeleb eq $j/subeleb
(: Return result :)
return $i

如果你需要处理重复项(在元素级别,不关心输入中是否有两个具有完全相同内容的元素),请将所有内容括在括号中并添加/.(步骤操作处理一式两份)。

(
  for $i in //elementone, $j in //elementone
  where $i != $j
  and $i/subelea eq $j/subelea
  and $i/subeleb eq $j/subeleb
  return $i
)/.