Select MYSQL数据库混乱

Select MYSQL数据库混乱,select,key,Select,Key,所以在这个问题上,我遇到了麻烦。 员工(fname、minit、lname、ssn、生日、地址、性别、工资、SupersN、dno)密钥:ssn 部门(dname、DNAMBER、mgrssn、mgrstartdate)关键字:DNAMBER 项目(pname、pnumber、plocation、dnum)键:pnumber 以下是我写的: Select e.ssn, e.lname,e.fname, From employee e, where e.ssn in (select s.ssn,

所以在这个问题上,我遇到了麻烦。 员工(fname、minit、lname、ssn、生日、地址、性别、工资、SupersN、dno)密钥:ssn 部门(dname、DNAMBER、mgrssn、mgrstartdate)关键字:DNAMBER 项目(pname、pnumber、plocation、dnum)键: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”。如何修复此问题?

自连接(同一个表)。别名
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'

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

在中使用
是可以的,但是对于相关子查询,
存在
是一种方法:

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'
             );
注:

  • 将交换
    s
    e
    。您需要主管信息,因此它会进入外部查询
  • 多余的逗号已被删除
  • 已添加
中使用
,它看起来像:

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

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

您是指lnamme中的打字错误吗?在整个过程中使用别名
s.
,即使在select STMTY中,您也有一个很好的处理器。我不会那么慷慨,因为您在
子查询中有一个
,它返回的列比您检查的要多。(逗号和missing
的输入错误,但不太重要。)只需执行联接,而不是子查询。因此,它将是一个自联接,具有2个aliases@drew请你写一个答案,我会接受的。对不起,错别字不是问题,我只是在这里打错了,只是少了几个逗号John@Drew是的,在这个过程中:)+1对你来说,同样的思维过程大大改善了答案