Мне нужно изучить таблицу, которая описывает график, но сложность связана с тем фактом, что каждый узел может иметь родителя другого типа, поэтому иерархия не просто выполняется для родительского столбца и дочернего столбца
ДЕМО СТРУКТУРА И ДАННЫЕ
If object_id('dbo.TST_COMPONENT') is not null
DROP table TST_COMPONENT
CREATE TABLE TST_COMPONENT (
[MAT_CODE] VARCHAR(max)
, [SPEC_CODE] VARCHAR(max)
, [COMP_MAT_CODE] VARCHAR(max)
, [COMP_SPEC_CODE] VARCHAR(max)
);
INSERT INTO TST_COMPONENT (
[MAT_CODE], [SPEC_CODE], [COMP_MAT_CODE], [COMP_SPEC_CODE]
)
VALUES
('M1', NULL, 'M2', NULL),
('M1', NULL, 'M4', NULL),
('M2', NULL, NULL, 'S3'),
('M2', NULL, 'M6', NULL),
(NULL, 'S3', 'M5', NULL),
('M4', NULL, NULL, 'S4'),
('M5', NULL, NULL, NULL),
('M6', NULL, NULL, NULL),
(NULL, 'S4', NULL, 'S5'),
(NULL, 'S5', 'M7', NULL),
('M7', NULL, NULL, NULL);
В этом случае M1 имеет M2 и M4 в качестве детей, M2 имеет M6 и S3, а S3 имеет M5.В другой ветви M4 переходит к S4, затем к S6 и, наконец, к M7.
Какой самый быстрый способ исследовать это дерево с помощью SQL-запроса?Еще лучше это работает для Oracle и SQL Server.