0

我有两个表 tableA 和 tableB。有一些列,每个表之一是 XML 文件(实际上它是图书馆数据库的 MARCXML - KOHA)。我需要加入这两个文件。

表 tableA - 列 marcxml 表 tableB - 列元数据。

这些 MARCML 文件的一些结构是这样的:

这是来自元数据列表 B

<datafield tag="111" ind1=" " ind2=" ">
    <subfield code="a">Some text</subfield>
    <subfield code="c">Paris</subfield>
    <subfield code="v">city</subfield>
    <subfield code="x">**M003**</subfield>
    <subfield code="y">France</subfield>
    <subfield code="z">2.2.2022</subfield>
  </datafield>

这是来自 tableA marcxml 列

<datafield tag="034" ind1=" " ind2=" ">
    <subfield code="f">50.6946219N</subfield>
    <subfield code="e">15.8469800E</subfield></datafield>
<datafield tag="040" ind1=" " ind2=" ">
    <subfield code="a">PK</subfield></datafield>
<datafield tag="042" ind1=" " ind2=" ">
    <subfield code="a">**M003**</subfield></datafield>

我尝试过这样的事情,但不知何故我觉得它不正确。

SELECT
    ExtractValue(b.metadata, '//datafield[@tag="042"]/subfield[@code="a"]') AS cityCodeB,
    ExtractValue(a.marcxml, '//datafield[@tag="042"]/subfield[@code="a"]') AS cityCodeA,
    ExtractValue(a.marcxml, '//datafield[@tag="034"]/subfield[@code="f"]') AS north,
    ExtractValue(a.marcxml, '//datafield[@tag="034"]/subfield[@code="e"]') AS east,
    ExtractValue(b.metadata, '//datafield[@tag="111"]/subfield[@code="a"]') AS cityText,
    ExtractValue(b.metadata, '//datafield[@tag="111"]/subfield[@code="c"]') AS cityName
FROM
    tableB b
INNER JOIN tableA a ON 
    (ExtractValue(a.marcxml,'//datafield[@tag="042"]/subfield[@code="a"]') = 
    ExtractValue(b.metadata, '//datafield[@tag="042"]/subfield[@code="a"]'))
WHERE
    ExtractValue( a.marcxml, '//datafield[@tag="042"]/subfield[@code="a"]' ) LIKE 'M%'
4

0 回答 0