----------
User
----------
user_ID(pk)
UserEmail
----------
Employer1
----------
Emp1ID(pk)
Emp1NO
----------
Employer2
----------
Emp2ID(pk)
Emp2NO
----------
Project
----------
ProjEmpID
ProjEmpMGRID
我需要显示用户电子邮件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)
但我在子查询中得到错误,在IN子句上声明了太多参数。是否有其他方法可以重写查询以获得结果。任何帮助,将不胜感激。
答案 0 :(得分:5)
您只能从子查询中返回一列。如果您只想要员工ID和经理ID,请将联合查询视为子查询:
emp.Emp2NO IN
(select ProjEmpID from project
union
select ProjEmpMGRID from project)
或重写以使用两个IN查询,每个查询具有单独的子查询。
答案 1 :(得分:2)
Eric Hauser是正确的 - 您不能将IN子句中包含的SELECT中的两列指定到外部的一列。
也就是说,我重写了你的查询,所以你根本不需要使用UNION:
SELECT DISTINCT u.user_email
FROM USERS u
JOIN EMPLOYER e ON u.user_id IN (e.emp1id, e.emp2id)
JOIN PROJECT p ON e.emp1no IN (p.projempid, p.projempmgrid)
OR e.emp2no IN (p.projempid, p.projempmgrid)
我还将查询更改为使用ANSI-92 JOIN语法 - 您的原始语法使用ANSI-89。
答案 2 :(得分:1)
答案 3 :(得分:0)
emp.Emp2NO IN
(select ProjEmpID from project) or (select ProjEmpMGRID from project)
希望你能理解为什么会这样。你可以通过gnmsr@ap.nic.in
给我发邮件好的,我会expalin。 Emp1NO是一个值,其中值列表中的每个值都返回一个列值,其中ur查询返回多个矩阵(行数)X 2