denisbednov
@denisbednov

Как получить полный комплект граф иерархии из таблицы?

Доброго времени суток!
Имеется кросс-таблица:
create table crosses (a varchar, b varchar);
С содержимым:
insert into crosses values ('1','A');
insert into crosses values ('1','B');
insert into crosses values ('2','A');
insert into crosses values ('2','C');
insert into crosses values ('3','C');
insert into crosses values ('3','D');
insert into crosses values ('4','E');

Необходимо получить "граф" связей, т.е. в результате должно быть следующее:
1 A
1 B
2 A
2 C
3 C
3 D

При запросе:
WITH RECURSIVE cte AS
(
  SELECT
    a,
    b,
    FALSE revertRef
  FROM
    crosses
  WHERE
    a = '1'
   
  UNION

  SELECT
    c.a,
    c.b,
    (NOT cte.revertRef) revertRef
  FROM
    cte
    INNER JOIN crosses c ON 
      (CASE WHEN cte.revertRef THEN c.a ELSE c.b END) = (CASE WHEN cte.revertRef THEN cte.a ELSE cte.b END)      
)
SELECT * FROM cte WHERE revertRef ORDER BY a;


Все отлично работает на небольшом количестве данных, но в моем случае в таблице около 50 млн. записей. Запрос выполнялся около 10 часов и так и не выдал результата. Есть ли какое-то типовое решение данной задачи?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы