Выберите записи, когда данные 2 столбцов будут совпадать - PullRequest
2 голосов
/ 08 мая 2019

У меня есть две таблицы, как показано ниже:

 -----------------------
 |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 будет отправлено письмо о том, что жалоба подана вашим сотрудником, и вы должны принять ее, поэтому я хочу получить EmailID начальника сотрудника и для что я хочу один запрос SQL. Я попробовал запрос, показанный здесь, но он не работает.

select EmpEmailID
from tblComplaint
inner join tblEmpMaster on tblEmpMaster.EmpNo = tblComplaint.EmpPSNo
where tblComplaint.EmpPSNo = tblEmpMaster.EmpBossNo

Я хочу вывод, например ... если жалоба выдвинута EmpNo:9091, он вернет EmailID своего босса, который xyz@gmail.com.

Ответы [ 3 ]

6 голосов
/ 08 мая 2019

Вы находитесь на правильном пути с объединением таблиц 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;

enter image description here

Демо

Я использовал левостороннее объединение выше, в случае, если у данного сотрудника нет босса (например, для босса самого высокого ранга). В этом случае я отображаю NA для электронной почты босса.

0 голосов
/ 08 мая 2019

вы можете даже использовать подзапросы, чтобы получить 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)
0 голосов
/ 08 мая 2019

Вы должны самостоятельно присоединиться 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...