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

SQL-为什么会发生这种情况?,sql,sql-server,database,Sql,Sql Server,Database,这些是我正在处理的问题。 考虑到这一点,我想展示一下既是主管又是经理的员工 但是当我用这个的时候 select e1.fname,e1.lname from employee e1,employee e2,department where e1.ssn=e2.super_ssn and e1.ssn = Mgr_ssn 这就是 我知道我可以用“distinct”解决这个问题,但我更感兴趣的是知道为什么输出结果会是这样。关于存在的问题如何 select e.* from employee e w

这些是我正在处理的问题。
考虑到这一点,我想展示一下既是主管又是经理的员工

但是当我用这个的时候

select e1.fname,e1.lname
from employee e1,employee e2,department
where e1.ssn=e2.super_ssn and e1.ssn = Mgr_ssn
这就是

我知道我可以用“distinct”解决这个问题,但我更感兴趣的是知道为什么输出结果会是这样。

关于
存在的问题如何

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) ;
查询返回重复项有两个原因。首先,据推测,经理和主管下面有多名员工。最后为每个这样的员工创建行。第二,您有一个笛卡尔乘积,它与
部门
,它进一步将行相乘。查询中未使用
部门


在这种情况下,使用
select distinct
不是一个好的解决方案。数据库最终需要做的工作比需要的多得多——首先创建重复的行,然后删除它们。

在where like中添加department matching子句

 select e1.fname,e1.lname
 from employee e1,employee e2,department d
 where e1.ssn=e2.super_ssn and e1.ssn = Mgr_ssn and 
 d.Dnumber=e1.Dno

你认为它应该做什么?