SQL - 为什么会发生这种情况?

时间:2017-03-19 16:08:17

标签: sql sql-server database

这些是我正在使用的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'来解决这个问题,但是我更感兴趣的是知道为什么输出就像它一样。

2 个答案:

答案 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