Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取特定用户的记录树列表_Sql_Sql Server_Treeview - Fatal编程技术网

Sql 获取特定用户的记录树列表

Sql 获取特定用户的记录树列表,sql,sql-server,treeview,Sql,Sql Server,Treeview,我有两张桌子: 表1(信息) MessageID | UserID | Subject | TextM | FatherMessage | 表2(结核病登记) 用户ID |用户名| 在树列表中使用以下查询,其中我设置了DataKeyNames=MessageID和ParentDataKeyNames=FatherMessage,我得到了所有用户的消息树和相关答案: SELECT Messages.Subject, Messages.FatherMessage, Me

我有两张桌子:

表1(信息)

MessageID | UserID | Subject | TextM | FatherMessage |

表2(结核病登记)

用户ID |用户名|


在树列表中使用以下查询,其中我设置了DataKeyNames=MessageID和ParentDataKeyNames=FatherMessage,我得到了所有用户的消息树和相关答案:

SELECT Messages.Subject,
       Messages.FatherMessage,
       Messages.TextM,
       Messages.MessageID,
       Tb_Registration.Username
FROM   Messages
       INNER JOIN Tb_Registration
               ON Messages.UserID = Tb_Registration.UserID
ORDER  BY Messages.MessageID ASC 
我现在的挑战是获得完全相同的结果,但是对于特定的用户,我不知道如何进行这样的查询。我的意思是,来自特定用户的FatherMessage以及与之相关的所有子消息。级别0(新消息)上的所有消息在表中的字段FatherMessage=null。所有其他消息(答案)都有父消息的MessageID作为FatherMessage

以下是一些示例数据:

MessageID | UserID | Subject | TextM | FatherMessage |
    1       user1       X       some       null
    2       user2     null      text         1
    3       user3     null      text         1
    4       user4     null      text         2
    5       user4      y        text       null
上述(其中Username=user1)的预期输出为:

我们将非常感谢您的帮助。

试试这个

DECLARE @Messages TABLE(MessageID int,
                        UserID VARCHAR(100), 
                        Subject varchar(150), 
                        TextM varchar(250), 
                        FatherMessage int)
INSERt INtO @Messages
(MessageID ,UserID , Subject , TextM , FatherMessage )
VALUES
(1,'user1','X ','some  ',null),
(2,'user2','null','text',1),
(3,'user3','null','text',1),
(4,'user4','null ','text ',2),
(5,'user4',' y  ',' text',null)


    ;with cte(MessageID , UserID , Subject , TextM , FatherMessage) AS (
    select * from @Messages where UserID='user1'
    UNION all
    SELECT m.* FROM @Messages m INNEr JOIN cte ON m.FatherMessage=cte.MessageID
    )
    SELECT * FROM cte
输出

    MessageID   UserID  Subject TextM   FatherMessage
--------------------------------------------------------
       1         user1     X    some    NULL
       2         user2    null  text    1
       3         user3    null  text    1
       4         user4    null  text    2

您必须使用
递归CTE
。如果可能,请使用
示例数据
预期输出
@NoDisplayName编辑您的问题,谢谢您的提示。我已经更新了我的问题,添加了样本数据和预期输出。
    MessageID   UserID  Subject TextM   FatherMessage
--------------------------------------------------------
       1         user1     X    some    NULL
       2         user2    null  text    1
       3         user3    null  text    1
       4         user4    null  text    2