在SQL视图中使用字符串替换id

4

我有两个表格...

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

基本上是将“manager_id”替换为该ID的用户名。我一直在试图解决这个问题,但我无法解决它——我的SQL技能显然有点欠缺——我该怎么做?

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

目前我只了解到这个程度。

3个回答

4
SELECT t1.groupid, t1.membership_list, t2.username
FROM table1 t1
INNER JOIN table2 t2 ON t1.managerid = t2.userid

那应该就可以了。或者我漏掉了什么?

我认为这样做不会起作用。连接应该在membership_list的分割上进行,你只是显示经理信息,而不是用户的会员信息。 - KM.
我在联接方面有一些奇怪的心理障碍,感谢marc_s指出了显而易见的问题! :) - Ben L

0

你需要将 membership_list 列拆分到一个新表中:

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'

查找所有Ben的组。

如果您不想修改表格,您需要一个拆分函数,将membership_list中的多个值转换为行。您没有提到您正在使用的实际数据库,而拆分函数取决于了解该数据库。


0

SELECT A.groupid, A.membership_list, B.managername FROM table1 A, table2 B WHERE A.managerid = B.userid and membership_list LIKE '%/?/%'

查询 A 组 ID、成员列表以及 B 管理者名称,在 table1 A 和 table2 B 表中,只有当 membership_list 中包含 '/?/' 时才符合条件。


当userid为2、22、222等时,您的LIKE会找到错误的匹配。 - KM.
mcgyver5可能是从我的问题中的select语句中得到的。这是用于视图中的,所以'?'将在使用之前被替换为一个值。 - Ben L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接