查找多级分层数据的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的那一行,这是如何划分的?