Как развернуть родительские дочерние таблицы? - PullRequest
3 голосов
/ 23 мая 2019

Я хотел бы попросить помощи для поворота этой родительской дочерней таблицы.

Таблица «Мой родитель-ребенок»:

parent  child
ve1      vet12 
ve1      vet13
vet12    adm1
vet13    adm2
adm2     xyz
ve2      vy1
vx       kit1

Я хочу включить таблицу Parent-Child в эту таблицу:

level1  level2  level3  level4
 ve1     vet12   adm1
 ve1     vet13   adm2    xyz
 ve2     vy1
 vx      kit1

Однако мой тестовый запрос все еще не работает.


мой тест:

SELECT
    L1.child as ID
    L1.parent as Level1
    L2.parent as Level2
    L3.parent as Level3
    L4.parent as Level4
FROM
    Hierarchy as L1

        INNER JOIN
    Hierarchy as L2
        ON L1.child = L2.parent

        INNER JOIN
    Hierarchy as L3
        ON L2.child = L3.parent

        INNER JOIN
    Hierarchy as L4
        ON L3.child = L4.parent

Я протестировал только 4 уровня, но в реальной базе данных номер уровня может измениться.


Таблица для теста:

CREATE TABLE Hierarchy(
    parent  VARCHAR(20),
    child VARCHAR(20))



  INSERT INTO Hierarchy VALUES ('ve1','vet12'),
('ve1' ,'vet13'),
('vet12','adm1'),
('vet13','adm2'),
('adm2','xyz'),
('ve2','vy1'),
('vx','kit1')

1 Ответ

0 голосов
/ 23 мая 2019

Количество столбцов не должно изменяться, поэтому вам необходимо указать их определенное количество. Вам нужно изменить свои СОЕДИНЕНИЯ на ВНЕШНИЕ СОЕДИНЕНИЯ, чтобы разрешить иметь иерархии с меньшим количеством уровней, чем максимум.

SELECT
    L1.parent AS Level1,
    L1.child  AS Level2,
    L2.child  AS Level3,
    L3.child  AS Level4,
    L4.child  AS Level5
FROM      Hierarchy as L1
LEFT JOIN Hierarchy as L2 ON L1.child = L2.parent
LEFT JOIN Hierarchy as L3 ON L2.child = L3.parent
LEFT JOIN Hierarchy as L4 ON L3.child = L4.parent
WHERE NOT EXISTS( SELECT Child FROM Hierarchy h WHERE h.child = L1.Parent);
...