如何使用XMLQuery在DB2的xml列中针对同一名称属性检查多个值?

时间:2014-02-25 12:56:23

标签: db2 xquery xquery-sql

这是我用来从我的表中获取数据的查询。

SELECT XMLQUERY('$INFO/root/database_systems/system/@name = ("SYS1","SYS2","SYS3")') 
FROM MyTable WHERE ACCT_ID = 'ID-1234';

好吧实际上它让我回归真实。仅仅因为SYS1的第一个值。它存在于层次结构中但不存在于其他层次结构我只是想比较多个值。

请建议一种实现此功能的方法。感谢

    <root>
    <database_systems>
    <system name="SYS1">1</system>
    </database_systems>
    </root>

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要检查包含至少所有子元素的database_systems元素:

<system name="SYS1">...</system>
<system name="SYS2">...</system>
<system name="SYS3">...</system>

如果这是正确的,那么你需要和你的条件在一起,你以前所做的是一个OR:

SELECT XMLQUERY('not(empty($INFO/root/database_systems[system/@name eq "SYS1"][system/@name eq "SYS2"][system/@name eq "SYS3"]))') 
    FROM MyTable WHERE ACCT_ID = 'ID-1234';

我使用了三个谓词来实现AND,然后使用not(empty(...))检查是否找到了匹配项。还有很多其他方法可以实现这一目标。