0

我正在尝试基于将它们映射在一起的第三个表来加入/合并/来自两个表的任何数据。这是想法:

表 USERS 包含用户 ID、用户名和一些其他数据。表 GROUPS 包含组 ID、组名称和一些其他数据。

表 USERGROUPMAP 包含一组映射在一起的用户 ID 和组 ID,它们对应于 USERS 和 GROUPS 中的 ID。每个用户可以在多个组中,每个组可以有多个用户。

我总是通过在单个字段中存储对象或 CSV 数据来做到这一点,例如在名为 MEMBERS 的组中创建一个列并存储 id1、id2、id3 ......但这就是我所看到的。

我无法更改架构...我知道这与 JOIN 或 UNION 或其他东西有关,但我的 SQL 非常生疏,所以有人可以在这里帮忙吗?

我可能是半正确的想法-

SELECT USERS.uid, 
       GROUPS.gid, 
       USERGROUPMAP.uid, 
       USERGROUPMAP.gid 
  FROM USERS, 
       GROUPS, 
       USERGROUPMAP 
  JOIN ON ((USERS.uid = USERGROUPMAP.uid) AND (GROUPS.gid = USERGROUPMAP.gid))

有小费吗?:( .. 多谢你们。

编辑,预期的 IO

USERS 表包含一堆 UID ... 1,2,3,4,5,等等 GROUPS 表包含一堆 GID,1000,1001,1002 等等

USERGROUPMAP 包含对应于哪些用户在哪些组中的元组,例如 (1,1002) (2,1000) (5,1003) (5,1000)

我正在尝试获取用户所在的组列表,因此对于此示例,我想获得两行 5,1003 和 5,1000 ...有意义吗?

4

2 回答 2

1
Select a.userID, a.name, b.groupName
from USERS a, GROUPS b, USERGROUPMAP c
where c.userID = a.userID and 
b.groupID = c.groupID and
c.userID = <searchID>

您要搜索的用户 ID 是查询中的 searchID。如果要列出组的用户,可以将 userID 替换为 groupID。

于 2012-09-24T20:09:17.737 回答
1

假设在 USERS 和 GROUPS 中没有重复,这是三个表之间的简单连接:

SELECT
  USERS.FIELD1,
  USERS.FIELD2,
  -- ...
  USERS.FIELDN,
  GROUPS.FIELD1,
  GROUPS.FIELD2,
  -- ...
  GROUPS.FIELDN
FROM USERS
JOIN USERGROUPMAP ON USERS.UID = USERGROUPMAP.UID
JOIN GROUPS ON USERGROUPMAP.GID = GROUPS.GID
于 2012-09-24T20:11:56.510 回答