首页 > 解决方案 > SQL Server 重复结果三次

问题描述

我正在尝试过滤我的结果以输出在部门 5 控制的所有项目中工作的人员的姓名。我认为我在下面写的内容会给我想要的结果,但它却显示了从事这些项目的人员的姓名每个项目 3 次。我该怎么做才能解决这个问题?

SELECT e.Fname, e.Minit, e.Lname
FROM EMPLOYEE AS e, DEPARTMENT as d, PROJECT as p
WHERE p.Dnum=d.Dnumber AND d.Dnumber=e.Dno AND p.Dnum=5

这导致输出:

John    B   Smith
John    B   Smith
John    B   Smith
Franklin    T   Wong
Franklin    T   Wong
Franklin    T   Wong
Joyce   A   English
Joyce   A   English
Joyce   A   English
Ramesh  K   Narayan
Ramesh  K   Narayan
Ramesh  K   Narayan

标签: sqlsql-serversql-server-2017

解决方案


似乎您有一个多对一的关系,并且在执行 ANSI-89(即 1989 年)连接时没有考虑到这一点。结果,由于表DEPARTMENTPROJECT.

考虑到您只EMPLOYEESELECT假设您实际上想要一个EXISTS

SELECT e.Fname,
       e.Minit,
       e.Lname
FROM dbo.EMPLOYEE E
WHERE E.Dno = 5 --Inferred as p.Dnum=5 and p.Dnum=d.Dnumber and d.Dnumber=e.Dno. Thus e.Dno = 5
  AND EXISTS (SELECT 1
              FROM dbo.DEPARTMENT D
                   JOIN dbo.PROJECT P ON D.Dnumber = P.Dnum
              WHERE D.Dnumber = E.Dno);

但是,如果您不关心 Employee 是否有部门(或项目),那么以下内容就可以了:

SELECT e.Fname,
       e.Minit,
       e.Lname
FROM dbo.EMPLOYEE E
WHERE E.Dno = 5;

推荐阅读