所以我有3个表,我想要执行一些查询,但在这个过程中我最终返回到一个表,我已经执行了一些函数和它。
我首先从一个依赖表中获取essn并在employee表中搜索匹配它的ssn然后我得到了superssn并与另一个表中的mgrssn进行比较。最后一步是返回employee表并找到具有相同ssn mgrssn的人的姓名。
这里的问题是,一旦我得到匹配的超级用户,我就无法访问其他行。
select lname, fname from
(select mgrssn from department) as d,
(select superssn, lname,fname,ssn from
(select essn from dependent where dependent_name ='joy') as de,
(select ssn,lname,fname,superssn from employee) as e
where essn =ssn) as s
where s.ssn = mgrssn
我应该考虑做联接吗?
答案 0 :(得分:1)
您不需要子查询。您的查询有点难以理解(您没有所有列的表别名),但我认为这是您要做的事情:
select lname, fname
from department d join
employee e
on e.ssn = d.mgrssn join
dependent dep
on dep.essn = e.ssn
where dep.dependent_name ='joy';
简单规则:永远不要在from
子句中使用逗号。始终使用明确的join
语法。