Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка по "наследственности" / 6 сообщений из 6, страница 1 из 1
28.11.2018, 13:27
    #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
28.11.2018, 14:31
    #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
28.11.2018, 14:57
    #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
28.11.2018, 15:09
    #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
28.11.2018, 15:09
    #39739855
INVALID_UTF8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по "наследственности"
Человек и Кошка,

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

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


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