powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка по "наследственности"
6 сообщений из 6, страница 1 из 1
Сортировка по "наследственности"
    #39739732
INVALID_UTF8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги.


Сижу уже не первый день, пытаюсь состряпать запрос с сортированным выводом след. вида:

Имеется таблица среди столбцов которой есть f_entityid и f_parentid с данными вида:

GUID1 NULL ....
GUID66 GUID2 ...
GUID2 GUID1 ....
GUID3 GUID2 ....
GUID77 GUID1 ....
GUID5 GUID2 ...
GUID4 GUID3 ....

и так далее.

Чтобы не делать это на клиенте с хитрой программной реализацией, хотелось бы иметь хитрый запрос, который бы вернул данные в необходимом порядке:
GUID1 NULL ....
GUID2 GUID1 ....
GUID77 GUID1 ....
GUID3 GUID2 ....
GUID5 GUID2 ...
GUID66 GUID2 ...
GUID4 GUID3 ....

и так далее.

Хранимка - не вариант.

Если есть у кого идеи, буду токмо рад!

Спасибо.
...
Рейтинг: 0 / 0
Сортировка по "наследственности"
    #39739808
Человек и Кошка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INVALID_UTF8,

~

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
with recursive a as
  (
    select *
      from ( values ('GUID1' , null   )
                  , ('GUID66', 'GUID2')
                  , ('GUID2' , 'GUID1')
                  , ('GUID3' , 'GUID2')
                  , ('GUID77', 'GUID1')
                  , ('GUID5' , 'GUID2')
                  , ('GUID4' , 'GUID3')
           ) as t (f_entityid, f_parentid)
  )
, b as
  (
    select a.f_entityid
         , a.f_parentid
         , 1 as level
      from a
     where a.f_parentid is null
    union all
    select a.f_entityid
         , a.f_parentid
         , b.level + 1 as level
      from a
        join b on b.f_entityid = a.f_parentid
  )
select *
  from b
 order by level, f_entityid
...
Рейтинг: 0 / 0
Сортировка по "наследственности"
    #39739836
INVALID_UTF8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Человек и Кошка,

Спасибо за ответ! Не подскажите куда втыкать выборку из таблицы?

Ни
with recursive a as
(
select *
from ( select f_entityid, f_parentid from t_system
) as t (f_entityid, f_parentid)
)
, ...

Ни
with recursive a as
(
select f_entityid, f_parentid from t_system
)
, ...

Не работает.


Спасибо огромное за ответ!
...
Рейтинг: 0 / 0
Сортировка по "наследственности"
    #39739852
Человек и Кошка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INVALID_UTF8,

Ты точно программист? )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with recursive b as
  (
    select a.f_entityid
         , a.f_parentid
         , 1 as level
      from t_system a
     where a.f_parentid is null
    union all
    select a.f_entityid
         , a.f_parentid
         , b.level + 1 as level
      from t_system a
        join b on b.f_entityid = a.f_parentid
  )
select *
  from b
 order by level, f_entityid
...
Рейтинг: 0 / 0
Сортировка по "наследственности"
    #39739855
INVALID_UTF8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Человек и Кошка,

Всё, разобрался, добавил ещё or f_parentid = '' и заработало!

Спасибо ещё раз гигантское!
...
Рейтинг: 0 / 0
Сортировка по "наследственности"
    #39739867
INVALID_UTF8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Человек и КошкаТы точно программист? )
Я не программист БД, но иногда приходится с БД иметь дело, увы. Посему, зря вы так колко с улыбочкой.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка по "наследственности"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]