Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 用于搜索所有子节点的查询中的Xpath_Sql_Xml_Postgresql_Xpath - Fatal编程技术网

Sql 用于搜索所有子节点的查询中的Xpath

Sql 用于搜索所有子节点的查询中的Xpath,sql,xml,postgresql,xpath,Sql,Xml,Postgresql,Xpath,我在用postgres。我的数据是xml格式的。我想写一个查询来获取匹配的记录。该记录可能位于任何子元素中。我需要在查询中使用XPath的结果 样本数据: <book category="Cooking"> <title lang="en">XQuery Kick Start</title> <author>Leonard Richardson</author> <aut

我在用postgres。我的数据是xml格式的。我想写一个查询来获取匹配的记录。该记录可能位于任何子元素中。我需要在查询中使用XPath的结果

样本数据:

<book category="Cooking">
          <title lang="en">XQuery Kick Start</title>
          <author>Leonard Richardson</author>
          <author>Sam Ruby</author>
          <year>2007</year>
          <price>58.33</price>
</book>
这没有取得任何结果

问题2:

SELECT id, xmldata
FROM tblprofile AS a
WHERE 'Leonard Richardson' = CAST((xpath('/book/author/text()', xmldata))[1] AS TEXT)

当上述查询与第一个条目匹配时获取结果。如何使查询1工作?如何在所有子节点中搜索?

因为您只需要在where子句的XML列中检查是否存在具有特定值的
author
元素,那么
XMLEXISTS()
更合适:

SELECT id, xmldata FROM tblprofile AS a 
WHERE  XMLEXISTS('/book/author[.="Sam Ruby"]' PASSING a.xmldata)

SELECT id, xmldata FROM tblprofile AS a 
WHERE  XMLEXISTS('/book/author[.="Sam Ruby"]' PASSING a.xmldata)