2张表,user_info表 和 rule_info表
user_info表有主键id和level字段 字段值为1-5
rule_info表有主键id和level1,level2,level3,level4,level5 字段 , 字段值都是对应的user_info中的id值数据大致为:
user_info
id            level
51                1
52                2
53                3
54                3
--------------------------------------
rule_info
id         userId        level1          level2          level3          level4        level5
11             51             51
12             52             51               52                   
13             53             51               52                53
14             54             51               52                54
现在想要写个sql语句 通过一个user_info的id值 也就是一个用户 找到他的user_info中level,再去rule_info表中查到所有刚才查出来的level值的对应列的所有id值
比如:查id为52下面的所有userId,先在user_info中找到他的level是2,再去rule_info表中找level2列,所有值为52的userId列,出来的应该是52,53,54

解决方案 »

  1.   

    ;WITH CTE AS(
    SELECT T1.id,T2.userId
    FROM user_info T1
    JOIN rule_info T2 ON T1.id=(CASE T1.level
    WHEN 1 THEN T2.level1
    WHEN 2 THEN T2.level2
    WHEN 3 THEN T2.level3
    WHEN 4 THEN T2.level4
    WHEN 5 THEN T2.level5
    END)
    )
    SELECT id
    ,STUFF((SELECT ','+CAST(userId AS VARCHAR(10))
    FROM CTE T2
    WHERE T1.id=T2.id
    FOR XML PATH(''))
    ,1,1,'')[userIds]
    FROM user_info T1
      

  2.   

    弱弱地问下。。 一句sql语句是搞不定的吗?我本来还想这句sql用作子查询语句 和其他sql拼接的
      

  3.   

    怕你看不清~~SELECT id
    ,STUFF((SELECT ','+CAST(T2.userId AS VARCHAR(10))
    FROM rule_info T2
    WHERE T1.id=
    (CASE T1.level
    WHEN 1 THEN T2.level1
    WHEN 2 THEN T2.level2
    WHEN 3 THEN T2.level3
    WHEN 4 THEN T2.level4
    WHEN 5 THEN T2.level5
    END)
    FOR XML PATH(''))
    ,1,1,'')[userIds]
    FROM user_info T1