SQL Server: иерархические данные - PullRequest
0 голосов
/ 25 мая 2018

У меня есть несколько таблиц с именами таблиц: TableA (столбец первичного ключа: ID1), TableB (столбец первичного ключа: ID2), TableC (первичныйКлючевой столбец: ID3).

CREATE TABLE TableA(
   ID1         INTEGER  NOT NULL PRIMARY KEY 
  ,TableA_Name VARCHAR(14) NOT NULL
  ,TableA_Desc VARCHAR(27) NOT NULL
);

INSERT INTO TableA(ID1,TableA_Name,TableA_Desc) VALUES (1,'TableA Parent1','This is TableA description1');
INSERT INTO TableA(ID1,TableA_Name,TableA_Desc) VALUES (2,'TableA Parent2','This is TableA description2');
INSERT INTO TableA(ID1,TableA_Name,TableA_Desc) VALUES (3,'TableA Parent3','This is TableA description3');

CREATE TABLE TableB(
   ID2         INTEGER  NOT NULL PRIMARY KEY 
  ,TableB_Name VARCHAR(11) NOT NULL
  ,TableB_Desc VARCHAR(27) NOT NULL
);

INSERT INTO TableB(ID2,TableB_Name,TableB_Desc) VALUES (1,'TableB Kid1','This is TableB description1');
INSERT INTO TableB(ID2,TableB_Name,TableB_Desc) VALUES (2,'TableB Kid2','This is TableB description2');
INSERT INTO TableB(ID2,TableB_Name,TableB_Desc) VALUES (3,'TableB Kid3','This is TableB description3');

CREATE TABLE TableC(
   ID3         INTEGER  NOT NULL PRIMARY KEY 
  ,TableC_Name VARCHAR(11) NOT NULL
  ,TableC_Desc VARCHAR(27) NOT NULL
);

INSERT INTO TableC(ID3,TableC_Name,TableC_Desc) VALUES (1,'TableC kid1','This is TableC description1');
INSERT INTO TableC(ID3,TableC_Name,TableC_Desc) VALUES (2,'TableC kid2','This is TableC description2');
INSERT INTO TableC(ID3,TableC_Name,TableC_Desc) VALUES (3,'TableC Kid3','This is TableC description3');
INSERT INTO TableC(ID3,TableC_Name,TableC_Desc) VALUES (4,'TableC Kid3','This is TableC description4');

У меня есть таблица иерархии с именем Hierarchy_Table .

CREATE TABLE Hierarchy_Table(
   Table_Name         VARCHAR(6) NOT NULL PRIMARY KEY
  ,PK_Column          VARCHAR(3) NOT NULL
  ,Selected_ID        INTEGER  NOT NULL
  ,Hierarchy_Level    INTEGER  NOT NULL
  ,Parent_Table       VARCHAR(6)
  ,Parent_Column      VARCHAR(4)
  ,Selected_Parent_ID INTEGER 
);


INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableA','ID1',1,1,NULL,NULL,NULL);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableB','ID2',1,2,'TableA','ID1',1);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableC','ID3',1,3,'TableB','ID2',1);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableC','ID3',2,3,'TableB','ID2',1);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableB','ID2',2,2,'TableA','ID1',1);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableC','ID3',3,3,'TableB','ID2',2);
INSERT INTO Hierarchy_Table(Table_Name,PK_Column,Selected_ID,Hierarchy_Level,Parent_Table,Parent_Column,Selected_Parent_ID) VALUES ('TableC','ID3',4,3,'TableB','ID2',2);

Мне нужно перебрать каждую строку для указанного выше набора результатов Hierarchy_Table,на основе Table_Name, PK_Column и Selected_ID, а также Parent_Table, Parent_Column и Selected_Parent_ID мне нужно получить все столбцы и их значения из таблиц TableA, TableB и TableC.

Как должен выглядеть мой запрос SQL?Мой желаемый набор результатов должен содержать столбцы Selected_ID, TableA_Name, TableA_Desc, TableB_Name, TableB_Desc, TableC_Name, TableC_Desc, Selected_Parent_ID, Parent_Name, Parent_Desc.

Примечание. Столбцы TableA, TableB, TableC могут расти, поэтому мне нужно получить все столбцы и значения из этих таблиц в моих новых результатах.

Я был бы очень признателен за помощь.Заранее спасибо.

...