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
你认为它应该做什么?