使用IN子句的子查询

jer*_*ero 2 sql oracle

----------
User
----------
user_ID(pk)
UserEmail

----------
Employer1
----------
Emp1ID(pk)
Emp1NO

----------
Employer2
----------
Emp2ID(pk)
Emp2NO

----------
Project
----------
ProjEmpID
ProjEmpMGRID
Run Code Online (Sandbox Code Playgroud)

我需要显示用户电子邮件ID.表之间的关系如下:在Employer(1和2)表中,EmpID包含User表中UserID的值.

雇主否与项目表中的值有关.EmpNo包含来自ProjEmpID,ProjEmpMGRID的值.

 select u.user_email from users u, Employer emp 
    where emp.Emp1ID =  u.user_id and 
    emp.Emp1NO IN
    (select ProjEmpID,ProjEmpMGRID from project)
union 
  select u.user_email from users u, Employer emp 
    where emp.Emp2ID =  u.user_id and 
    emp.Emp2NO IN
    (select ProjEmpID,ProjEmpMGRID from project)
Run Code Online (Sandbox Code Playgroud)

但是我在子查询中得到错误,在IN子句中声明了太多参数.是否有任何其他方法可以重写查询以获得结果.任何帮助,将不胜感激.

Eri*_*ser 5

您只能从子查询返回一列.如果您只想要员工ID和经理ID,请将联合查询视为子查询:

    emp.Emp2NO IN
(select ProjEmpID from project
 union
 select ProjEmpMGRID from project)
Run Code Online (Sandbox Code Playgroud)

或重写以使用两个IN查询,每个查询具有单独的子查询.