部门 X 人被部门 Y 人控制

Department X person is controlled by Department Y person

我有 3 table 名员工、项目和工作人员,示例数据为:

员工:

SocialSecurityNo   Department_No

121212              1
456789              2
666666              2
444444              2

沃森

ESSn              Projectno

121212             5000
456789             1000
456789             2000
666666             1000
666666             2000
666666             3000
666666             4000
666666             5000
666666             6000

项目:

ProjectNumber  Dnum

1000           5
2000           5
3000           5
4000           4
5000           1
6000           4

我必须检查是否为 Dno y 选择了具有 SocialSecurityNo x 的员工,但他正在处理分配给部门 z 的项目。

我已经为它写了一个查询,我的查询正在工作,发现所有正在工作的 SSn 都为部门 x 选择并为部门 x 工作,我试图做相反的事情,但是当我申请时 NOT IN 在子查询上然后它还会给我那些在 workson table

中没有数据的社会保险号码

下面是我的查询:

Select E.SocialSecurityNo FROM EMPLOYEE E WHERE E.SocialSecurityNo NOT IN 

(Select E.SocialSecurityNo From 

EMPLOYEE E Join WORKSON W ON E.SocialSecurityNo=W.ESSn 

Join PROJECT P ON E.Department_No=P.Dnum 

Where W.ProjectNumber=P.Projectno);

这是你想要的吗?

select e.*, p.*
from employee e
inner join workson w on w.essn = e.socialsecurityno
inner join project p on p.projectnumber = w.projectno
where p.dnum <> e.department_no

这会带来所有 employee/project 对,其中员工的部门与项目的部门不匹配。

旁注:我建议调整 table 中的列名称,这样架构更容易理解。社会安全号码在一个 table 中被称为 essn 而在另一个中被称为 socialsecurityno 是没有道理的; projectnumber vs projectnodnum vs department_no.

也是如此