Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как обратиться к элементу вложенной структуры по имени  [new]
Kr_Yury
Member

Откуда: Киев, Украина
Сообщений: 222
Имеем:
create type t_order_item as (item_number int, price numeric, quantity numeric, ... );
create type t_order as (order_id int, ..., items t_order_item[]);
function get_order(p_order_id int)
returns t_order_header

К отдельному элементу массива можно обратиться как
select unnest(res.items::t_order_item[]) from get_order(566) res;

Но хотелось бы обратиться к отдельному элементу из t_order_item, например к price. Как это можно сделать?

Сообщение было отредактировано: 28 июл 20, 12:32
28 июл 20, 12:30    [22174586]     Ответить | Цитировать Сообщить модератору
 Re: Как обратиться к элементу вложенной структуры по имени  [new]
Kr_Yury
Member

Откуда: Киев, Украина
Сообщений: 222
Коллега нашёл решение
select (e).*
from 
(select unnest(res.items::t_order_item[]) as e
   from get_order(566) res
) t;
28 июл 20, 13:22    [22174610]     Ответить | Цитировать Сообщить модератору
 Re: Как обратиться к элементу вложенной структуры по имени  [new]
Swa111
Member

Откуда:
Сообщений: 202
Kr_Yury, возможно получится так

select (unnest(res.items::t_order_item[])).price
   from get_order(566) res


или так

select res.price
   from unnest(((get_order(566)).items)::t_order_item[]) res
28 июл 20, 21:09    [22174851]     Ответить | Цитировать Сообщить модератору
 Re: Как обратиться к элементу вложенной структуры по имени  [new]
Kr_Yury
Member

Откуда: Киев, Украина
Сообщений: 222
Swa111, да это уже вариации того что выше. Главное, что для разименования полей структуры результат после unnest надо обернуть в скобки (). Где об этом сказано в документации?
Причём приведение к типу можно не делать. То есть так тоже работает:
select res.*
from unnest(((get_order(566)).items)) res;


Сообщение было отредактировано: 29 июл 20, 10:15
29 июл 20, 10:11    [22174983]     Ответить | Цитировать Сообщить модератору
 Re: Как обратиться к элементу вложенной структуры по имени  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 722
Kr_Yury
Swa111, да это уже вариации того что выше. Главное, что для разименования полей структуры результат после unnest надо обернуть в скобки (). Где об этом сказано в документации?

https://postgrespro.ru/docs/postgresql/12/sql-expressions#FIELD-SELECTION
29 июл 20, 10:16    [22174987]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить