Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres查询以获取与xpath条件匹配的行_Sql_Postgresql - Fatal编程技术网

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)