首页 > 解决方案 > 如何反转或过滤掉在其他部门从事项目的两名员工?

问题描述

所以现在我很接近但现在返回的结果表只显示我不想看到的员工,我想显示只在他们部门内的项目上工作的员工。

我已将三个表连接在一起并尝试使用 NOT IN 运算符,但我似乎无法正确使用它?

这是我的代码

SELECT e.FNAME,
       e.LNAME
FROM ballen15db.EMPLOYEE e,
     ballen15db.WORKS_ON w
WHERE e.SSN=w.ESSN
  AND EXISTS
    (SELECT *
     FROM ballen15db.PROJECT p
     WHERE w.PNO=p.PNUMBER
       AND p.DNUM!=e.DNO )
GROUP BY e.SSN;

预期成绩

John Smith
Joyce English
Ramesh Rayan
Alicia Zelaya
Ahmad Jabbar
James Borg

实际结果

Franklin Wong
Jennifer Wallace

在此处输入图像描述

标签: mysqlsql

解决方案


首先,学习使用正确的JOIN语法。然后使用GROUP BYandHAVING为您的逻辑:

select e.SSN, e.FNAME, e.LNAME 
from ballen15db.EMPLOYEE e join
     ballen15db.WORKS_ON w
     on e.SSN = w.ESSN join
     ballen15db.PROJECT p 
     on w.PNO = p.PNUMBER 
group by e.SSN, e.FNAME, e.LNAME 
having sum(p.dum <> e.dno) = 0;

having计算部门编号不同的次数。= 0说不存在这样的行。


推荐阅读