MYSQL 数据库混乱

MYSQL database confusion

所以在这个问题上,我遇到了麻烦。 EMPLOYEE(fname,minit,lname,ssn,birthdate,address,sex,salary,superssn,dno) key:ssn 部门(名称、编号、mgrssn、mgrstartdate)key:dnumber 项目(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分,教授说我的select s.ssn,slname部分错了,一定是"match my e.ssn"。我应该如何解决这个问题?

一个自连接(相同table)。 Alias e 是工作人员,alias 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'

您的 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 语句的问题是您正在创建一个依赖子查询,它检查员工 table 中的每一行以及相同 table 中的每一行。

分解查询本身

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

使用 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 被交换了。您需要 supervisor 信息,所以它进入外部查询。
  • 多余的逗号已被删除。
  • 已添加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'
               );

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