查找多级分层数据的SQL查询
假设我在关系表中有一些数据,如下所示查找多级分层数据的SQL查询,sql,sql-server,Sql,Sql Server,假设我在关系表中有一些数据,如下所示 name friend_name Ryan James Chin James Jack Charley Tomy Ryan Bill Chin 现在,给我一个叫“詹姆斯”的朋友,我想要结果 name Ryan Chin Tomy Bill 我的SQL查询应该是什么样子?我使用的是SQL Server。如果没有重复项,那么
name friend_name
Ryan James
Chin James
Jack Charley
Tomy Ryan
Bill Chin
现在,给我一个叫“詹姆斯”的朋友,我想要结果
name
Ryan
Chin
Tomy
Bill
我的SQL查询应该是什么样子?我使用的是SQL Server。如果没有重复项,那么入门级的方法就是使用
联合
SELECT name
FROM t1
WHERE friend_name = 'James'
UNION
SELECT friend_name name
FROM t2
WHERE name = 'James'
您可以使用递归CTE查找James
朋友的所有朋友:
WITH CTE AS (
SELECT *
FROM friends
WHERE friend_name = 'James'
UNION ALL
SELECT f.*
FROM friends f
JOIN CTE ON f.friend_name = CTE.name
)
SELECT name
FROM CTE
输出:
name
Ryan
Chin
Bill
Tomy
请注意,“Jame”实际上是“James”,在他的朋友叫Din的那一行,这是如何划分的?