Xpath в запросе для поиска всех дочерних узлов

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
209
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вам нужно только проверить, существует ли элемент author с определенным значением в столбце XML в вашем предложении where, то XMLEXISTS() будет более подходящим:

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

demo

Другие вопросы по теме