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

Откуда:
Сообщений: 22
Здравствуйте
Есть таблица tovar(x,xgr,name)
Родитель тоже из таблицы tovar
Надо вывести все позиции, у которых xgr или xgr.xgr или xgr.xgr.xgr.... и т.д. равен, скажем, 7
Т.е. вывести все элементы, что находятся в папке x=7
Подскажите, пожалуйста, как это сделать элегантно

PS Либо альтернативный вариант, чтобы select давал т.н. полный код. Полный код = xgr.xgr.xgr/xgr.xgr/xgr/x
Причем чем глубже элемент, тем больше дробей в полном коде.
22 мар 21, 05:08    [22298019]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
pakko
Member

Откуда:
Сообщений: 22
Сам задал, сам нашёл.
WITH RECURSIVE tt AS (SELECT tov.* FROM tov WHERE x = 7 UNION SELECT tov.* FROM tov JOIN tt ON tov.xgr = tt.x)
SELECT * FROM tt

А теперь посложнее вопрос.
Товар храниться так:
самый первый родитель и второй родитель идут как папки сортировки. Нужно чтобы селект давал код и имя третьего родителя начиная с самого начала:
x,xgr3,gr3name,name
Т.е. первый уровень: xgr=0
Второй уровень xgr.xgr=0
НУЖНЫЙ третий уровень xgr.xgr.xgr=0
Уровней может быть много, нужен третий для каждого элемента.

Сообщение было отредактировано: 22 мар 21, 07:10
22 мар 21, 07:18    [22298026]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
pakko
Member

Откуда:
Сообщений: 22
нет идей?
14 апр 21, 09:51    [22308615]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
per
Member

Откуда:
Сообщений: 132
pakko
нет идей?


Есть, но вам понадобится кровь девственницы и безоаровый камень.
16 апр 21, 00:20    [22309615]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить