Иерархический запрос классифицирует категорию среднего уровня как верхний уровень - PullRequest
1 голос
/ 30 апреля 2019

У меня есть таблица с 3-уровневыми иерархическими данными, однако мой запрос неправильно классифицирует уровни.

Мой запрос:

SELECT  t1.name AS lev1, t2.name as lev2, t3.name as lev3
FROM sds_test AS t1
LEFT JOIN sds_test AS t2 ON t2.parent_id = t1.ID
LEFT JOIN sds_test AS t3 ON t3.parent_id = t2.ID;

Категория Музейные и художественные школы получают дополнительный ряд, поскольку это категория высшего уровня, которую я хочу исключить. Если я поставлю уровень 2 не NULL, он испортит те категории, которые имеют один верхний уровень, например Авиация

Желаемый результат Музейно-художественная школа не должна относиться к категории высшего уровня и не должна иметь отдельного ряда для них.

Actual Results Expected

Я не уверен, как решить эту проблему, поскольку CTE также дает мне аналогичные результаты. Я попытался использовать случай

case when parent_id = NULL then что опять-таки не дает мне желаемых результатов.

SQL-запрос для восстановления таблицы:

create table sds_test (id int, name varchar(30), parent_id int);
insert into sds_test values(1, 'Educational Institute', NULL);
insert into sds_test values(2, 'Speciality Schools', 1);
insert into sds_test values(3, 'Arts School', 2);

insert into sds_test values(4, 'Restraunts', NULL);
insert into sds_test values(5, 'Asian Restraunts', 4);
insert into sds_test values(6, 'malasian Rest', 5);

insert into sds_test values(7, 'Recreational', NULL);
insert into sds_test values(8, 'Museum', 7);

insert into sds_test values(9, 'Aviation', NULL);

1 Ответ

0 голосов
/ 30 апреля 2019

Я думаю, вы были очень близки:

SELECT  t1.name AS lev1, t2.name as lev2, t3.name as lev3
FROM sds_test AS t1
LEFT JOIN sds_test AS t2 ON t2.parent_id = t1.ID
LEFT JOIN sds_test AS t3 ON t3.parent_id = t2.ID
WHERE t1.parent_id IS NULL

Результат:

lev1                    lev2                lev3    
Educational Institute   Speciality Schools  Arts School
Restraunts              Asian Restraunts    malasian Rest
Recreational            Museum              NULL
Aviation                NULL                NULL 

Все, что я сделал, это добавил условие, что у элемента в t1 не должно быть родителя.

Это явно не соответствует желаемому результату. Интересно, почему Авиация не должна быть там?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...