我正在使用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>
查询1:
SELECT id, xmldata
FROM tblprofile AS a
WHERE 'Sam Ruby' = CAST((xpath('/book/author/text()', xmldata))[1] AS TEXT)
这没有获取任何结果。
查询2:
SELECT id, xmldata
FROM tblprofile AS a
WHERE 'Leonard Richardson' = CAST((xpath('/book/author/text()', xmldata))[1] AS TEXT)
获取结果,因为上述查询与第一个条目匹配。如何使查询1工作?如何在所有子节点中搜索?
答案 0 :(得分:1)
由于只需要检查where子句的XML列中是否存在具有特定值的author
元素,因此XMLEXISTS()
会更合适:
SELECT id, xmldata FROM tblprofile AS a
WHERE XMLEXISTS('/book/author[.="Sam Ruby"]' PASSING a.xmldata)