2015-11-13 44 views
0

所以基本上是这样的数据库: 考虑下面SQL查询解决方案混乱,由一群迷茫的和having子句

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组成的计数(*)> = 2, 应该> = 2部分用于项目p而不是?因为我们发现 大于2的项目编号?

如果你们有时间,你能否请正确的解决方案标志显示 哪部分属于哪个员工,他们为什么需要。对此,我真的非常感激。

+0

对不起太宽泛,我们将不得不教你一个db的课程来涵盖所有这些要点。你应该问问你的老师。请阅读[**如何询问**](http://stackoverflow.com/help/how-to-ask) –

回答

0

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

2.employee e和部门d,他们为什么都需要?我以为我们只发现员工

没有,要求是不是找到员工,它是寻找经理

加1.为什么在works_on?

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

3.最后,最令人困惑的部分是由具有数w.essn组() > = 2,那么应该将> = 2部分用于项目p吗?因为我们发现项目数大于2?*

您是否在寻找涉及2名或更多员工的项目,或者您是否在寻找曾参与过2个或更多项目的员工?

+0

谢谢,请您将解决方案的意见写下来,我会接受它。就像对解决方案部分的一些简要描述一样。抱歉,因为当我尝试阅读代码时,我感到很困惑。 – Marcus