1

我有一个表views,其中有一列包含 XML 文档(存储为text)。这是一个简化版本:

<?xml version="1.0"?>
<view>
  <image>
    <sequence>
      <param name="scan">129</param>
    </sequence>
  </image>
  <image>
    <sequence>
      <param name="scan">1</param>
    </sequence>
  </image>
  [...]
</view>

另一个表包含 XML 中引用的扫描。如果目前重构为新表不切实际,如何在 SQL 查询中连接这两个表?

4

1 回答 1

3

如果您的 PostgreSQL 已使用 编译--with-libxml,则以下查询应该可以工作:

SELECT ...
  FROM views
  JOIN scans ON scans.id = ANY (
           xpath(
               '/view/image/sequence/param[@name = "scan"]/text()',
                views.xml::xml)::text[]::int[])
;

那是:

  1. views.xmltextxml
  2. 将所有扫描 ID 值作为xmlusing的数组获取xpath()
  3. xml数组转换为一个数组,text然后转换为一个数组int(您不能直接xml[]转换为int[],至少在 PostgreSQL 9.2 中)。
  4. 检查 XML 中的至少一个扫描 ID 是否匹配。
于 2013-01-15T09:21:04.200 回答