当前位置: 首页 > 知识库问答 >
问题:

内部连接和IN的组合:Oracle Sql

夹谷岳
2023-03-14

我有4个表,USER(ID,USER_ID,NAME),USER_2(ID,USER_ID,EMAIL)USER_CLASS_MAP(ID,USER_ID,CLASS_ID)和CLASS(ID,NAME)USER_CLASS_MAP基本上是要映射USERCLASSMANY-MANY关系。

需要发送属于特定类的所有用户的所有详细信息。我有如下非工作代码 - 任何想法,我可能做错了什么,或者有没有其他有效的方法来实现相同的?

我指的是(SQL内部联接与3个表?)多个表的内部联接,但这里的问题是,我不是单个用户针对给定的CLASS_ID,而是从USER_CLASS_MAP获得USER_ID列表。

SELECT USER_ID from USER_CLASS_MAP where CLASS_ID=:classID

这是我目前拥有的:

SELECT USER1.NAME, USER2.EMAIL
INNER JOIN CLASS_USER_MAP as cmap
  ON cmap.USER_ID = USER1.ID
INNER JOIN CLASS_USER_MAP as cmap
  ON cmap.USER_ID = USER2.ID

这里的问题是.ID基本上是一个列表!

EXAMPLE:

USER:
(id1, user1, rob)
(id2, user2, bob)

USER_2:
(id1, user1, rob@something.something)
(id2, user2, bob@something.something)

USER_CLASS_MAP:
(id1, user1, class1)
(id2, user2, class1)

CLASS:
(class1, Biology)
(class2, Chemistry)

Given:
Get all User Details for class with classId = class1

Output:
[
  {USER_ID=user1, NAME=rob, EMAIL=rob@something.something},
  {USER_ID=user2, NAME=bob, EMAIL=bob@something.something}
]

共有1个答案

令狐声
2023-03-14

您的示例数据:

create table "USER"(ID, USER_ID, NAME) as (
  select 'id1', 'user1', 'rob' from dual union all
  select 'id2', 'user2', 'bob' from dual
);
create table USER_2(ID, USER_ID, EMAIL) as (
  select 'id1', 'user1', 'rob@something.something' from dual union all
  select 'id2', 'user2', 'bob@something.something' from dual
);
create table USER_CLASS_MAP(ID, USER_ID, CLASS_ID) as (
  select 'id1', 'user1', 'class1' from dual union all
  select 'id2', 'user2', 'class1' from dual
);
create table CLASS(ID, NAME) as (
  select 'class1', 'Biology' from dual union all
  select 'class2', 'Chemistry' from dual
);

查询:

select u.user_id, u.name, email
from class c 
       inner join USER_CLASS_MAP uc
         on ( uc.class_id = c.id)
       inner join "USER" u
         on ( uc.user_id = u.user_id)
       inner join USER_2 u2
         on ( u2.user_id = u.user_id)

结果:

user1   rob rob@something.something
user2   bob bob@something.something

请注意,USER是一个保留字,这就是我使用双引号的原因;最好不要使用保留字来命名对象。

 类似资料:
  • DemandEntity:实体本身 伙伴关系: 这种方法导致一个例外: 不幸的是,我无法添加另一个联接列 因为PART表不包含ORDER字段,并且数据库的结构无法更改。 有没有办法执行这样的映射?

  • 我有一个pyspark数据帧(df1 ),它由10K行组成,数据帧看起来像- 另一个pyspark数据帧(df2)由100k记录组成,看起来像- 我想使用pyspark内连接,最终的数据帧看起来像- df2中mobile_no的长度是12,但df1中是10。我可以加入它,但这是昂贵的操作。使用pyspark有帮助吗?

  • 问题内容: 对于这些查询,我可以获得相同的结果,但是哪一个是最快,最有效的? in()或内部联接在哪里? 和 问题答案: 取决于您的SQL引擎。具有合理查询优化器的较新SQL系统很可能会将两个查询重写为同一计划。通常,使用联接(第一个查询)重写子查询(第二个查询)。 在可能没有出色查询优化器的简单SQL引擎中,联接应该更快,因为它们可能在运行外部查询之前将子查询运行到临时内存表中。 但是,在某些内

  • 问题内容: 我无法找到一种使用MSAccess中的外部联接来联接4个或更多表的方法。它适用于SQL Server,但不适用于Access。我不相信这是可能的。我有表A,B,C,D和E。我需要像这样联接这些表: 左外连接B 左外连接C 内连接D B内连接E 当您在FROM子句中使用LEFT / RIGHT / INNER JOINS时,Access不会让您在where子句中使用常规联接。如果这样做,

  • 问题内容: 好的,这是。我有两个表:product和product_sizes 所以基本上我的产品表具有id(主键),名称(产品名称)和size_id(product_sizes中的外键) 我的product_sizes表具有预定值: 在这里,我有一个有效的代码来显示产品表(使用while代码以html格式): 我的问题是我想显示(用html表示)尺寸名称而不是其size_id,类似于以下示例:

  • 我想把这个过程内部化,这样只有云功能可以访问App Engineendpoint,但我正在与这个过程作斗争。 由于这两个服务都是无服务器的,所以我不能只过滤App Engine防火墙中的通信量,因为每次创建新实例时云功能都有不同的IP。 我曾尝试遵循本指南,其中建议将所有功能出口通信量与子网的无服务器VPC连接器相关联,然后用NAT控制该子网的所有通信量,并为其分配静态IP地址。这样,我可以通过N