Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You can try something like this</p> <pre><code>DECLARE @Users TABLE( UserID INT, UserName VARCHAR(50) ) DECLARE @FamilyTree TABLE( UserID INT, RelationID INT, Relation VARCHAR(50) ) INSERT INTO @Users (UserID,UserName) SELECT 1 ,'Rahul' INSERT INTO @Users (UserID,UserName) SELECT 2 ,'Anjli' INSERT INTO @Users (UserID,UserName) SELECT 3 ,'Ronak' INSERT INTO @Users (UserID,UserName) SELECT 4 ,'Rutu' INSERT INTO @Users (UserID,UserName) SELECT 5 ,'Riya' INSERT INTO @Users (UserID,UserName) SELECT 6 ,'Rishi' INSERT INTO @Users (UserID,UserName) SELECT 7 ,'Harry' INSERT INTO @Users (UserID,UserName) SELECT 8 ,'Dyna' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 1, 2 ,'Wife' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 2, 1 ,'Rahul' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 1, 3 ,'Son' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 3, 4 ,'Wife' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 3, 5 ,'Daughter' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 4, 5 ,'Daughter' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 4, 6 ,'Son' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 3, 6 ,'Son' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 1, 7 ,'Son' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 2, 7 ,'Son' INSERT INTO @FamilyTree (UserID,RelationID,Relation) SELECT 7, 8 ,'Wife' DECLARE @UserID1 INT, @UserID2 INT SELECT @UserID1 = 1, @UserID2 = 6 DECLARE @Table TABLE( cnt INT, cpath VARCHAR(50) ) ;WITH fam AS( SELECT *, 1 AS CntLevel, CAST('/' + CAST(ft.UserID AS VARCHAR(10)) + '/' AS VARCHAR(50)) AS CLevel FROM @FamilyTree ft WHERE ft.UserID = @UserID1 UNION ALL SELECT ft.*, fam.CntLevel + 1 AS CntLevel, CAST(fam.Clevel + CAST(ft.UserID AS VARCHAR(10)) + '/'AS VARCHAR(50)) AS CLevel FROM @FamilyTree ft INNER JOIN fam ON ft.UserID = fam.RelationID WHERE ft.UserID != @UserID1 ) INSERT INTO @Table(cnt, cpath) SELECT CntLevel, CAST(fam.Clevel + CAST(fam.RelationID AS VARCHAR(10)) + '/'AS VARCHAR(50)) FROM fam WHERE CAST(fam.Clevel + CAST(fam.RelationID AS VARCHAR(10)) + '/'AS VARCHAR(50)) LIKE ('/' + CAST(@UserID1 AS VARCHAR(10)) + '/%') AND CAST(fam.Clevel + CAST(fam.RelationID AS VARCHAR(10)) + '/'AS VARCHAR(50)) LIKE ('%/' + CAST(@UserID2 AS VARCHAR(10))+ '/') SELECT DISTINCT ft.* FROM @Table t INNER JOIN @FamilyTree ft ON PATINDEX('%/' + CAST(ft.UserID AS VARCHAR(10)) + '/%',t.cpath) &gt; 0 AND PATINDEX('%/' + CAST(ft.RelationID AS VARCHAR(10)) + '/%',t.cpath) &gt; 0 </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload