【问题标题】:Department X person is controlled by Department Y personX 部门人受 Y 部门人控制
【发布时间】:2020-11-16 00:30:16
【问题描述】:

我有 3 个表 Employee、Project 和 Workson,示例数据是:

员工:

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 的项目。

我已经为它写了一个查询,我的查询正在查找所有正在为部门 x 工作的 SSn 并为部门 x 工作,我试图做相反的事情,但是当我申请 NOT IN 时子查询,那么它也会给我那些在 workson 表中没有数据的社会安全号码

以下是我的查询:

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

【问题讨论】:

    标签: mysql sql subquery notin


    【解决方案1】:

    这是你想要的吗?

    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
    

    这会带来员工所在部门与项目部门不匹配的所有员工/项目对。

    旁注:我建议调整表中列的名称,以便更容易理解架构。没有理由将社会安全号码在一张表中称为essn,而在另一张表中称为socialsecuritynoprojectnumber vs projectnodnum vs department_no 也是如此。

    【讨论】:

    • 我正在阅读This create problems when some real-world concept is used in different roles (meanings) in the same relation的书
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多