Sql 从多对多关系中获取整个列表

Sql 从多对多关系中获取整个列表,sql,sql-server,tsql,recursion,recursive-query,Sql,Sql Server,Tsql,Recursion,Recursive Query,我有以下模式 CREATE TABLE BookRelationship (Id int IDENTITY(1,1) PRIMARY KEY, Book1 nvarchar(50), Book2 nvarchar(50)) INSERT INTO BookRelationship (Book1,Book2) VALUES ('Book 42','Book 24'), ('Book 42','Book 25'), ('Book 42','Book 56'), ('Book 42','Book

我有以下模式

CREATE TABLE BookRelationship
 (Id int IDENTITY(1,1) PRIMARY KEY, Book1 nvarchar(50), Book2 nvarchar(50))

INSERT INTO BookRelationship (Book1,Book2) VALUES
('Book 42','Book 24'), ('Book 42','Book 25'), ('Book 42','Book 56'), ('Book 42','Book 56'), ('Book 43','Book 24'), ('Book 43','Book 25'), ('Book 43','Book 26'), ('Book 43','Book 27'), 
('Book 43','Book 56'), ('Book 44','Book 29'), ('Book 44','Book 30'), ('Book 45','Book 31'), ('Book 45','Book 33'), ('Book 46','Book 34'), ('Book 47','Book 35'), ('Book 48','Book 36'), 
('Book 48','Book 37'), ('Book 49','Book 36'), ('Book 49','Book 37'), ('Book 50','Book 38'), ('Book 50','Book 39'), ('Book 51','Book 38'), ('Book 51','Book 39'), ('Book 52','Book 40'), 
('Book 52','Book 41'), ('Book 53','Book 40'), ('Book 53','Book 41'), ('Book 57','Book 24'), ('Book 57','Book 25'), ('Book 57','Book 26'), ('Book 57','Book 27'), ('Book 57','Book 56'), 
('Book 63','Book 24'), ('Book 63','Book 25'), ('Book 63','Book 26'), ('Book 63','Book 27'), ('Book 63','Book 56'), ('Book 63','Book 59'), ('Book 64','Book 59'), ('Book 64','Book 61'), 
('Book 65','Book 61'), ('Book 65','Book 62')
这些是不同书籍之间的关系

身份证件 第一册 第二册 1. 第42册 第24册 2. 第42册 第25册 3. 第42册 第56册 4. 第42册 第56册 5. 第43册 第24册 6. 第43册 第25册 7. 第43册 第26册 8. 第43册 第27册 9 第43册 第56册 10 第44册 第29册 11 第44册 第30册 12 第45册 第31册 13 第45册 第33册 14 第46册 第34册 15 第47册 第35册 16 第48册 第36册 17 第48册 第37册 18 第49册 第36册 19 第49册 第37册 20 第50册 第38册 21 第50册 第39册 22 第51册 第38册 23 第51册 第39册 24 第52册 第40册 25 第52册 第41册 26 第53册 第40册 27 第53册 第41册 28 第57册 第24册 29 第57册 第25册 30 第57册 第26册 31 第57册 第27册 32 第57册 第56册 33 第63册 第24册 34 第63册 第25册 35 第63册 第26册 36 第63册 第27册 37 第63册 第56册 38 第63册 第59册 39 第64册 第59册 40 第64册 第61册 41 第65册 第61册 42 第65册 第62册 例如:

WITH 
T_REC AS
(SELECT Book1 AS BookName, Book2
 FROM BookRelationship
 UNION ALL
 SELECT T.Book2, R.Book2
 FROM   BookRelationship AS T JOIN T_REC AS R
           ON T.Book1 = R.Book2)
SELECT DISTINCT Book2 FROM T_REC;

要建立这种关系,您首先需要自行重新构造数据 两人一桌 1-第一个表仅包含“书籍”和每本书的Id 2-第二个包含每本书之间的关系 包含递归关系 这将帮助您编写性能查询,而无需任何 复杂性
重要的问题
问题的商业案例是什么

编辑您的问题并显示您想要的结果。数据中是否存在循环的可能性,例如
“第一册”
→ <代码>“第二册”→ <代码>“第四册”→ <代码>“第二册”→ <代码>“第四册”→ ... ?这不是一个树层次结构,但它是一个无条件的多对多关系。这是否回答了您的问题?这将返回所有书籍,但我只需要与“Book 57”递归相关的书籍。例如,它们是“Book 24”、“Book 25”、“Book 26”、“Book 27”、“Book 42”、“Book 43”、“Book 56”、“Book 57”、“Book 59”、“Book 61”、“Book 62”“第63册”、“第64册”、“第65册”