Я использую 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? Как искать во всех дочерних узлах?


Поскольку вам нужно только проверить, существует ли элемент author с определенным значением в столбце XML в вашем предложении where, то XMLEXISTS() будет более подходящим:
SELECT id, xmldata FROM tblprofile AS a
WHERE XMLEXISTS('/book/author[. = "Sam Ruby"]' PASSING a.xmldata)