Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
使用将两个表映射到一起的第三个表关联Oracle中两个表的数据_Oracle_Oracle11g - Fatal编程技术网

使用将两个表映射到一起的第三个表关联Oracle中两个表的数据

使用将两个表映射到一起的第三个表关联Oracle中两个表的数据,oracle,oracle11g,Oracle,Oracle11g,我试图基于第三个表将两个表中的数据连接/联合/任何数据映射到一起。以下是想法: 表用户包含用户ID、用户名和其他一些数据。 表组包含组ID、组名称和其他一些数据 表USERGROUPMAP包含一组映射在一起的用户ID和组ID,它们对应于用户和组中的ID。每个用户可以在多个组中,每个组可以有多个用户 我总是通过在单个字段中存储对象或CSV数据来实现这一点,例如,在名为MEMBERS的组中创建一列,并存储id1、id2、id3……但这就是我所看到的 我无法更改模式…我知道这与连接或联合或其他有关,但

我试图基于第三个表将两个表中的数据连接/联合/任何数据映射到一起。以下是想法:

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

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

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

我无法更改模式…我知道这与连接或联合或其他有关,但我的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

用户表包含一组UID…1、2、3、4、5等等 GROUPS表包含一组gid、100010011002等

USERGROUPMAP包含对应于哪些用户在哪些组中的元组,例如(11002)(21000)(51003)(51000)

我试图获取用户所在组的列表,因此在本例中,我希望获得两行51003和51000…有意义吗?

选择a.userID、a.name、b.groupName
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>
来自用户a、组b、用户GroupMap c 其中c.userID=a.userID和 b、 groupID=c.groupID和 c、 用户ID=

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

假设用户或组中没有重复项,这是三个表之间的简单联接:

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

我了解您的表和结构,但我不确定您在这里寻找的是什么类型的输出。您能提供一个场景和预期结果吗?实际上,我的印象是,隐式连接与这样的位置非常慢……或者至少过去是这样的(我上次的oracle尝试是……8?)这相当快吗?对于多个表,您无法避免。这是最快的方法。您可以尝试运行各种类型的查询,但除非您的表非常大,否则您不会看到任何明显的差异。除非您使用的是非常旧的Oracle版本,否则这两种样式的性能应该相同。哦,是的,查询优化器应该能够接手并找到最佳执行计划。我想这也是正确的,尽管我不能接受一个以上的答案:(