选择2列数据何时匹配的记录

时间:2019-05-08 04:53:12

标签: sql-server

我有两个表,如下所示:

 -----------------------
 |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

3 个答案:

答案 0 :(得分:6)

tblComplainttblEmpMaster表之间的联接使您处在正确的轨道上。但是,您需要对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;

enter image description here

Demo

如果给定的员工没有老板(例如,最高级别的老板),我在上方使用了左自我连接。在这种情况下,我将显示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

DB Fiddle

答案 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)