MYSQL数据库混乱

时间:2015-10-17 21:12:15

标签: select key

所以在这个问题上,我遇到了麻烦。     员工(fname,minit,lname,ssn,birthdate,address,sex,salary,superssn,dno)key:ssn     DEPARTMENT(dname,dnumber,mgrssn,mgrstartdate)键:dnumber     PROJECT(pname,pnumber,plocation,dnum)key:pnumber

这是我写的:

Select e.ssn, e.lname,e.fname,
From employee e,
where e.ssn in
(select s.ssn, s.lname,sfname
    from employee s,
    where s.superssn = e.ssn, AND s.lnamme='Wallace' s.fname ='Jennifer'
)

但我只得到了15分中的10分,我的教授说我的选择s.ssn,slname部分是错误的,它必须与我的e.ssn匹配#34;。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

自我加入(同桌)。别名e适用于工作人员,别名s适用于主管。

select s.ssn, s.lname,s.fname,
From employee s
join employee e
on s.ssn=e.superssn
where e.lname='Wallace' and e.fname ='Jennifer'

答案 1 :(得分:1)

你的in语句会使这个查询变慢。你可以将它重构成一个像这样的自我加入

select e.ssn, e.lname, e.fname
from employee e
join employee s on s.superssn = e.ssn
where s.lnamme='Wallace' AND s.fname ='Jennifer';

你的in语句的问题是你正在创建一个从属子查询,它检查employee表中的每一行与同一个表中的每一行。

打破查询本身

select s.ssn, s.lname, s.fname -- s is the supervisor
from employee e -- e is jennifer
join employee s on s.superssn = e.ssn -- self join on the supervisors id is equal to the employees id
where e.lnamme='Wallace' AND e.fname ='Jennifer';

答案 2 :(得分:0)

使用IN很好,但是使用相关子查询,EXISTS是可行的方法:

Select s.ssn, s.lname, s.fname
From employee s
where exists (select 1
              from employee e
              where e.superssn = s.ssn AND
                    e.lname = 'Wallace' AND
                    e.fname = 'Jennifer'
             );

注意:

  • 交换se。您需要主管信息,因此它会进入外部查询。
  • 删除了无关的逗号。
  • AND已添加。

使用IN,它看起来像:

Select s.ssn, s.lname, s.fname
From employee s
where s.ssn IN (select e.superssn
                from employee e
                where e.lname = 'Wallace' AND
                      e.fname = 'Jennifer'
               );

请注意,不需要关联子句。