如何编写 Select 查询以选择 DB2 中多次出现的特定 xml 节点?
How to write Select query for selecting particular xml nodes in DB2 which occur multiple times?
我有一个 XML 结构如下:
<root>
<firstChild>
<a>
<a1>someText</a1>
<a2>someNumber</a2>
<a>
<a>
<a1>someText1</a1>
<a2>someNumber1</a2>
<a>
<a>
<a1>someText2</a1>
<a2>someNumber2</a2>
<a>
<a>
<a1>someText3</a1>
<a2>someNumber3</a2>
<a>
</firstChild>
</root>
我想编写一个 DB2 SQL,它将 return 所有应用程序 ID,其中 a1 为 someText1,a2 为 someNumber1。
有关更多信息,我有一个 table say APPLICATION,其中有 application_xml 作为列。此列包含如上所示的所有 xml 文档,并针对每个应用程序 ID 进行存储。
有人可以建议一下吗。
我试过下面的查询,但没有成功。
select XMLQUERY('copy $new := $application_xml
for $i in $new/root/firstChild/a[a1 = "someText1"], $new/root/firstChild/a[a2 = "someNumber1"]
return $new') from application
根据您的描述,我假设 table 有两列应用程序 ID (aid) 和 application_xml。正如您想要的那样,return 应用程序 ID 查询的基本结构是
select aid from application
现在我们需要判断哪些行符合条件。您声明在相关 XML 文档中,元素 a1 和 a2 需要具有特定值。函数 xmlexists
是在 SQL 的 WHERE
子句中使用的函数:
select aid from application
where xmlexists('$d/root/firstChild/a[a1 = "someText1" and a2 = "someNumber1"]' passing application_xml as "d")
XMLEXISTS 用作过滤谓词。 "passing" 子句告诉 DB2 在 XPath/XQuery 表达式内的名称 "d" 下期望 "application_xml"。 XPath 表达式本身正在寻找路径 /root/firstChild/a
,在特定的 "a" 下,"a1" 和 "a2" 的条件都需要为真。如果你想要更广泛的条件,也有表达方式。
我有一个 XML 结构如下:
<root>
<firstChild>
<a>
<a1>someText</a1>
<a2>someNumber</a2>
<a>
<a>
<a1>someText1</a1>
<a2>someNumber1</a2>
<a>
<a>
<a1>someText2</a1>
<a2>someNumber2</a2>
<a>
<a>
<a1>someText3</a1>
<a2>someNumber3</a2>
<a>
</firstChild>
</root>
我想编写一个 DB2 SQL,它将 return 所有应用程序 ID,其中 a1 为 someText1,a2 为 someNumber1。
有关更多信息,我有一个 table say APPLICATION,其中有 application_xml 作为列。此列包含如上所示的所有 xml 文档,并针对每个应用程序 ID 进行存储。
有人可以建议一下吗。
我试过下面的查询,但没有成功。
select XMLQUERY('copy $new := $application_xml
for $i in $new/root/firstChild/a[a1 = "someText1"], $new/root/firstChild/a[a2 = "someNumber1"]
return $new') from application
根据您的描述,我假设 table 有两列应用程序 ID (aid) 和 application_xml。正如您想要的那样,return 应用程序 ID 查询的基本结构是
select aid from application
现在我们需要判断哪些行符合条件。您声明在相关 XML 文档中,元素 a1 和 a2 需要具有特定值。函数 xmlexists
是在 SQL 的 WHERE
子句中使用的函数:
select aid from application
where xmlexists('$d/root/firstChild/a[a1 = "someText1" and a2 = "someNumber1"]' passing application_xml as "d")
XMLEXISTS 用作过滤谓词。 "passing" 子句告诉 DB2 在 XPath/XQuery 表达式内的名称 "d" 下期望 "application_xml"。 XPath 表达式本身正在寻找路径 /root/firstChild/a
,在特定的 "a" 下,"a1" 和 "a2" 的条件都需要为真。如果你想要更广泛的条件,也有表达方式。