SQL查询解决混淆,被group by和having子句混淆

SQL query solution confusion, confused by group by and having clause

所以基本上这是数据库: 考虑下面给出的 COMPANY 数据库的关系模式

EMPLOYEE (fmane, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno)     KEY: ssn
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate)               KEY: dnumber.
PROJECT  (pname, pnumber, plocation, dnum)                          KEY: pnumber.
WORKS_ON (essn, pno, hours)                                         KEY: (essn, pno)
DEPENDENT  (essn, dependent-name, sex, bdate, relationship)             KEY: (essn, dependent-name)

问题是:

提供在克利夫兰从事两个或多个项目的经理的姓氏和 SSN。

修正方案是这样的:

select Lname
  from Employee e, Department d
where (e.ssn = d.mgrssn) 
   and  ssn in (
                      select  w.essn
                       from   works_on w, Project p
                      where w.pno = p.pnumber
                          and  p.plocation = 'Cleveland'
                      group by w.essn
                      having count(*) >= 2
                     )

我的问题是:

  1. 为什么要添加works_on?
  2. 员工e和部门d,为什么都需要?我以为我们只是在寻找员工
  3. 最后,最令人困惑的部分是按 w.essn 进行分组,其中 count(*) >= 2, >=2 部分应该用于项目 p 吗?因为我们发现 大于 2 的项目编号?

大家有空的话,能不能在正确的解法旁边放个标示给大家看看 哪个部分属于哪个员工以及为什么需要他们。非常感谢。

我们可以试试。希望这可以帮助。 你的问题是:

2.employeee和d部门,为什么都需要?我以为我们只找到 employee

不是,不是找员工,是找经理

1.Why是添加的works_on吗?

没有 works_on,你怎么知道**哪个员工在哪个项目上工作?**

3.finally,最令人困惑的部分是 group by w.essn having count() >= 2, >=2 部分应该用于项目 p 而不是?因为我们要找出大于 2 的项目编号?*

您是在寻找涉及 2 名或更多员工的项目,还是正在寻找参与过 2 名或更多项目的员工?