INNER JOIN和IN的组合:Oracle Sql

时间:2017-01-12 13:42:55

标签: sql oracle join

我有4个表,s.xcconfig = { 'VALID_ARCHS' => 'arm64 x86_64', } USER(ID, USER_ID, NAME), USER_2(ID, USER_ID, EMAIL)以及USER_CLASS_MAP(ID, USER_ID, CLASS_ID)CLASS(ID, NAME)基本上用于映射USER_CLASS_MAPUSER之间的MANY-MANY关系。

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

我在多个表上引用(SQL Inner-join with 3 tables?)INNER JOIN,但问题是针对给定的CLASS_ID而不是单个用户,我从{{1获得CLASS的列表}}

USER_ID

这就是我目前所拥有的:

USER_CLASS_MAP

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

SELECT USER_ID from USER_CLASS_MAP where CLASS_ID=:classID

1 个答案:

答案 0 :(得分:2)

您的样本数据:

y2="200"

查询:

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 是保留字,这就是我使用双引号的原因;最好不要使用保留字来命名对象。