这些是我正在使用的tables 考虑到这一点,我想展示既是主管又是经理的员工。
但是当我用这个
时select e1.fname,e1.lname
from employee e1,employee e2,department
where e1.ssn=e2.super_ssn and e1.ssn = Mgr_ssn
这是output
我知道我可以用'distinct'来解决这个问题,但是我更感兴趣的是知道为什么输出就像它一样。
答案 0 :(得分:1)
exists
怎么样?
select e.*
from employee e
where exists (select 1 from employee e2 where e2.mgr_ssn = e.ssn) and
exists (select 1 from employee e2 where e2.super_ssn = e.ssn) ;
您的查询返回重复项有两个原因。首先,可能是经理和主管在他们下面有多名员工。您最终会为每个此类员工添加行。其次,你有一个带有department
的笛卡尔积,它进一步增加了行数。查询中未使用department
表。
在这种情况下,使用select distinct
不是一个好的解决方案。数据库最终不得不做必要的工作 - 首先创建重复的行,然后删除它们。
答案 1 :(得分:1)
在
之类的地方添加部门匹配条款float