Php 构建一组从不同表分类的SQL查询

Php 构建一组从不同表分类的SQL查询,php,mysql,sql,oracle,Php,Mysql,Sql,Oracle,我正在编写一段代码,将以下一组表划分为4种不同的员工类型: SQL> select * from Project; PNAME PNUMBER PLOCATION DNUM --------------- ---------- --------------- ---------- Virtualization 40 Houston 5 CRM 50

我正在编写一段代码,将以下一组表划分为4种不同的员工类型:

SQL> select * from Project;

PNAME              PNUMBER PLOCATION             DNUM
--------------- ---------- --------------- ----------
Virtualization          40 Houston                  5
CRM                     50 Stafford                 4
Bladeservers            60 Houston                  1
ProductX                 1 Bellaire                 5
ProductY                 2 Sugarland                5
ProductZ                 3 Houston                  5
Computerization         10 Stafford                 4
Reorganization          20 Houston                  1
Newbenefits             30 Bellaire                 4

9 rows selected.

SQL> select * from Department;

DNAME              DNUMBER MGRSSN    MGRSTARTD
--------------- ---------- --------- ---------
Marketing               30 222222222 13-OCT-89
Research                 5 333445555 22-MAY-78
Administration           4 987654321 01-JAN-85
Headquarters             1 886655555 19-JUN-71

SQL> select * from Employee;

FNAME           M LNAME           SSN       BDATE     ADDRESS                        S     SALARY SUPERSSN         DNO
--------------- - --------------- --------- --------- ------------------------------ - ---------- --------- ----------
Theodore        M Nixon           333333333 01-JUL-75 100 Coley, Norfolk, VA         M      44000 222222222          1
James           F Kennedy         444444444 23-OCT-63 299 Lafayette, Ivor, VA        M      39000 333333333          1
James           E Borg            777777777 10-NOV-27 450 Stone, Houston, TX         M      55000                    1
John            B Smith           123456789 09-JAN-55 731 Fondren, Houston, TX       M      30000 333445555          5
Franklin        T Wong            333445555 08-DEC-45 638 Voss, Houston, TX          M      40000 886655555          5
Alicia          J Zelaya          999887777 19-JUL-58 3321 Castle, Spring,  TX       F      25000 987654321          4
Jennifer        S Wallace         987654321 20-JUN-31 291 Berry, Bellaire, TX        F      43000 886655555          4
Ramesh          K Narayan         666884444 15-SEP-52 975 Fire Oak, Humble, TX       M      38000 333445555          5
Joyce           A English         453453453 31-JUL-62 5631 Rice, Houston, TX         F      25000 333445555          5
Ahmad           V Jabbar          987987987 29-MAR-59 980 Dallas, Houston, TX        M      25000 987654321          4
James           E Modified        886655555 10-NOV-27 450 Stone, Houston, TX         M      55000                    1
Wilber          G Mills           222222222 05-JAN-74 220 Hampton, Norfolk, VA       M      20000 123456789          5

12 rows selected.

SQL> select * from Works_On;

ESSN             PNO      HOURS
--------- ---------- ----------
123456789          1       32.5
123456789          2        7.5
666884444          3         40
453453453          1         20
453453453          2         20
333445555          2         10
333445555          3         10
333445555         10         10
333445555         20         10
999887777         30         30
999887777         10         10
987987987         10         35
987987987         30          5
987654321         30         20
987654321         20         15
886655555         20
666884444          1         10
333445555          1          5
333445555         30          5

19 rows selected.
我需要进行一个SQL查询或一组查询,以确定一个项目中有多少员工:

  • 在项目部
  • 不在部门,但仍在项目中
  • 分配给项目的主管
  • 以及分配给该项目的经理
在我的脑海中,我有一个问题,可以分别得到其中的每一个,但子集不能重叠。如果员工在本部门,并且是主管,则只能将其视为主管

我的逻辑是:

部门:项目编号->项目编号工作;ESSN->员工SSN;DNO->部门DNNumber(检查=)

非部门:同上(勾选!=)

主管:与之前相同,但检查员工姓名

经理:和以前一样,但检查一下部门经理

有什么帮助吗

编辑一些ppl想要查看的代码:

以下是我的开始代码,可以在项目上获得尽可能多的独特ppl:

SQL> SELECT pnumber, count(distinct ssn) as Emp_Work FROM project LEFT JOIN (works_on join employee on essn=ssn) ON pnumber=pno GROUP BY pnumber ORDER BY pnumber;

   PNUMBER   EMP_WORK
---------- ----------
     1          4
     2          3
     3          2
    10          3
    20          3
    30          4
    40          0
    50          0
    60          0

选择9行。

请与我们分享你尝试过的内容。考虑发布一个SqLFIDDLIE,足以应对一些响应吗?我认为这可以用作子查询…我有一个想法,首先执行更具体的查询,并使用它们作为NOT IN/NOT HAVING子句来分隔DEPT和NON_DEPTSO NOT HAVING这样的一般类别。在Oracle SQL中,NOT HAVING不是一件事,我将尝试一些不存在的代码