как использовать подзапрос в качестве переменной и использовать переменную в функции возврата запроса — Postgres

#xml #postgresql #function

Вопрос:

У меня есть данные в виде xml-файла, поэтому первый шаг-преобразовать их в столбцы, а затем использовать эти столбцы в моем запросе select.

оба шага должны выполняться внутри одной и той же функции ( преобразование XML в столбцы, SQL-запрос).

 name_a := (select name from(SELECT unnest (xpath(' //name/text()',
                   xml_string))::text as name)as foo)) 
 

return query select * from table1 inner join table2 on table2.name in (name_a)

Ответ №1:

Было бы лучше не использовать переменную, а поместить подзапрос непосредственно в IN предложение в конечном операторе.

Если вы хотите использовать переменную, это должна быть переменная массива. Либо не unnest используйте use array_agg для преобразования его обратно в массив.

Затем этот массив можно использовать следующим образом:

 ... WHERE table2.name = ANY (array_var)