我有两个表,如下所示:
-----------------------
|EmpNo|Complaint |
-----------------------
|9091 |Change required|
|9092 |No change |
|9093 |Changes done |
-----------------------
上表包含员工编号和他的投诉。
我还有一张表格,其中包含员工的各种详细信息,如下所示。
-------------------------------
|EmpNo|EmailID |EmpBossNO|
-------------------------------
|9091 |abc@gmail.com|9092 |
|9092 |xyz@gmail.com|9093 |
|9093 |mno@gmail.com|9099 |
-------------------------------
在这里,如果Empno:9091
会提出任何投诉,那么将会向他的boss
发送一封邮件,说该投诉是您的员工提出的,您必须接受它,所以我想得到{{1} }员工的老板,为此,我需要一个SQL查询。我尝试了此处显示的查询,但没有用。
EmailID
我希望输出类似..如果select EmpEmailID
from tblComplaint
inner join tblEmpMaster on tblEmpMaster.EmpNo = tblComplaint.EmpPSNo
where tblComplaint.EmpPSNo = tblEmpMaster.EmpBossNo
提出了投诉,那么它将返回他老板的电子邮件ID,EmpNo:9091
。
答案 0 :(得分:6)
tblComplaint
和tblEmpMaster
表之间的联接使您处在正确的轨道上。但是,您需要对tblEmpMaster
进行额外的联接,以便为每位员工的投诉引入老板的电子邮件。
SELECT
c.EmpNo,
c.Complaint,
COALESCE(e2.EmailID, 'NA') AS boss_email
FROM tblComplaint c
INNER JOIN tblEmpMaster e1
ON c.EmpNo = e1.empNo
LEFT JOIN tblEmpMaster e2
ON e1.EmpBossNO = e2.EmpNo;
如果给定的员工没有老板(例如,最高级别的老板),我在上方使用了左自我连接。在这种情况下,我将显示NA
作为上司电子邮件。
答案 1 :(得分:0)
您应该自行加入tblEmpMaster
select boss.EmpEmailID
from tblComplaint
inner join tblEmpMaster emp on emp.EmpNo = tblComplaint.EmpPSNo
inner join tblEmpMaster boss on boss.EmpNo = emp.EmpBossNO
where tblComplaint.EmpPSNo = 9091
答案 2 :(得分:0)
您甚至可以使用子查询来获取老板的Email_Id,如下所示
SELECT Email_Id
FROM EMP_Details
WHERE Emp_No IN (
SELECT Boss_Id
FROM Emp_Details) AND
Emp_No IN (
SELECT Emp_No
FROM Emp_Complaints)