Sql Postgres查询以获取与xpath条件匹配的行
我的数据是Sql Postgres查询以获取与xpath条件匹配的行,sql,postgresql,Sql,Postgresql,我的数据是 <Transaction > <UUID>2017-03-17T08:00:00-086F0ADD43</UUID> <SequenceNumber Type="a">1</SequenceNumber> <SequenceNumber Type="b">1</SequenceNumber> </Transaction> <Transaction > &
<Transaction >
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>
<SequenceNumber Type="a">1</SequenceNumber>
<SequenceNumber Type="b">1</SequenceNumber>
</Transaction>
<Transaction >
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>
<SequenceNumber Type="a">2</SequenceNumber>
<SequenceNumber Type="b">2</SequenceNumber>
</Transaction>
这将导致所有行
xmldata | xpath
---------------+-----
<Transaction> | {1}
<Transaction> | {}
但我希望结果集的精确值如下所示
xmldata | xpath
---------------+-----
<Transaction> | {1}
如何修改上述查询以获取此信息?如何使用WHERE进行筛选: 如果您正在使用: 给你:
xmldata | xpath
------------------------------------------------+-------
<Transaction > +| 1
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>+|
<SequenceNumber Type="a">1</SequenceNumber>+|
<SequenceNumber Type="b">1</SequenceNumber>+|
</Transaction> |
(1 row)
select s.r, xmldata
from tbltransaction t
JOIN LATERAL (
SELECT (xpath('/Transaction/SequenceNumber[@Type="b" and text()="1"]/text()',
t.xmldata)::TEXT) AS r
)s ON TRUE
WHERE s.r != '{}';
WITH data (xmldata) AS (VALUES('<Transaction >
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>
<SequenceNumber Type="a">1</SequenceNumber>
<SequenceNumber Type="b">1</SequenceNumber>
</Transaction>'::xml),('
<Transaction >
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>
<SequenceNumber Type="a">2</SequenceNumber>
<SequenceNumber Type="b">2</SequenceNumber>
</Transaction>'::xml))
SELECT *
FROM data
, XMLTABLE('/Transaction/SequenceNumber[@Type="b" and text()="1"]/text()'
PASSING xmldata
COLUMNS xpath XML PATH '.'
) t;
xmldata | xpath
------------------------------------------------+-------
<Transaction > +| 1
<UUID>2017-03-17T08:00:00-086F0ADD43</UUID>+|
<SequenceNumber Type="a">1</SequenceNumber>+|
<SequenceNumber Type="b">1</SequenceNumber>+|
</Transaction> |
(1 row)