Select MYSQL数据库混乱
所以在这个问题上,我遇到了麻烦。 员工(fname、minit、lname、ssn、生日、地址、性别、工资、SupersN、dno)密钥:ssn 部门(dname、DNAMBER、mgrssn、mgrstartdate)关键字:DNAMBER 项目(pname、pnumber、plocation、dnum)键:pnumber 以下是我写的: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,
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对你来说,同样的思维过程大大改善了答案