2017-08-15 145 views
0

我们正在与MLM项目合作。该项目的基本思路是一样SQL Server内部加入到该查询再次内部加入再次相同

  • A已经通过
  • 乙介绍已经被
  • Ç介绍已经被B
  • d推出已经用C
介绍

我的SQL Server表结构就像

user_details

https://i.stack.imgur.com/xcHGd.jpg

现在理论上

A's Team Members are => B , C , D 
    B's Team Members are => C , D 
    C's Team Member is => D 
    D's Team Member is => null (he doesn't have any team members yet) 

使用SQL查询,我怎么能找到 'A' 的团队成员?

+1

我认为你的问题会更好地收到,如果你张贴你已经尝试过 - 感觉就像我们只是为你做你的工作。 – Leonidas199x

+0

你好, 它绝对不是那样的。我不希望你做我的工作。但从字面上看,我没有从哪里开始。 我知道内部连接可以使用。 我可以 SELECT * FROM 开始(从user_details选择*内部联接user_details上introduced_by_id = user_details.ID其中ID = 1)为 内连接user_details上user_details.introduced_by_id = user_details.id 但是,这将帮助我找到A的团队直到B,但我怎么能找到C和D? 然后,我必须写更多的2内连接.. 但真的说有25个成员,我找到了。 –

+1

从个人经验来看,如果你已经表明你试图解决这个问题,那么人们更有可能提供帮助。用你迄今为止试过的代码和你遇到的问题更新你的问题。 – Leonidas199x

回答

0

如下您可以使用递归的SELECT语句: -

DECLARE @LeadName CHAR(1) = 'A'; 

WITH Team AS (
    SELECT ID, F_NAME, L_NAME, INTRODUCED_BY FROM mlm 
    WHERE F_NAME = @LeadName 
    UNION ALL 
    SELECT M.ID, M.F_NAME, M.L_NAME, M.INTRODUCED_BY FROM mlm M 
     JOIN Team T ON M.INTRODUCED_BY = T.ID 
) 
SELECT * FROM Team WHERE F_NAME <> @LeadName; 

这里变量@LeadName是所需根(在你的案件 'A')的​​。