代码之家  ›  专栏  ›  技术社区  ›  Ben L

用SQL视图中的字符串替换ID

  •  3
  • Ben L  · 技术社区  · 15 年前

    我有两张桌子…

    groupid   membership_list   managerid
    -------------------------------------
    0         /0//1//2/         2
    1         /2/               2
    
    userid    username
    ------------------
    0         ben
    1         tom
    2         dan
    

    我想显示一个表,例如用户“ben”,它是他们所属组的列表,看起来像这样…

    groupid   membership_list   managername
    ---------------------------------------
    0         /0//1//2/         dan
    

    …所以基本上用那个ID的用户名替换“manager_id”。我一直在破解这个问题,但我无法解决这个问题——我的SQL技能显然有点欠缺——我如何做到这一点?

    SELECT groupid, membership_list, managerid FROM blah WHERE membership_list LIKE '%/?/%'
    

    …就我所知。

    3 回复  |  直到 15 年前
        1
  •  4
  •   marc_s    15 年前
    SELECT t1.groupid, t1.membership_list, t2.username
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.managerid = t2.userid
    

    这应该可以做到。还是我在这里丢了什么东西??

        2
  •  0
  •   mcgyver5 Ravi Kant    15 年前

    从表1 a、表2 b中选择a.groupid、a.membership_list、b.managername,其中a.managerid=b.userid和membership_list如'%/?/%

        3
  •  0
  •   KM.    15 年前

    您需要将成员列表列划分为新表:

    changed table: Groups
    groupid
    managerid
    
    table users
    userid
    username
    
    new table: UserGroups
    groupid   
    userid  
    

    然后您可以这样做:

    SELECT
        * 
        FROM Users                 u
            INNER JOIN UserGroups ug On u.userid=ug.userid
            INNER JOIN Groups      g ON ug.groupid=g.groupid
        WHERE u.Name='Ben'
    

    找到本所有的小组。

    如果不想修改表,则需要一个拆分函数,该函数将成员资格列表中的多个值转换为行。您没有提到您正在处理的实际数据库,拆分函数依赖于您的了解。