我有两个表 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%'