sql - 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
解决方案
似乎您有一个多对一的关系,并且在执行 ANSI-89(即 1989 年)连接时没有考虑到这一点。结果,由于表DEPARTMENT
和PROJECT
.
考虑到您只EMPLOYEE
在SELECT
我假设您实际上想要一个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;
推荐阅读
- python - 从 asn1 格式的签名数据中导出时间戳“signing_time”
- javascript - ember js 非 SPA 方法
- javascript - html/css/js 组件的个人库
- windows-10 - Windows 10 上的 Odoo 内部服务器错误。无法启动 Odoo 服务器 [Odoo 10.0]
- java - 如何在java中将数据从一个对象列表复制到另一个对象?
- android - 如何从另一个类更改 recyclerView 适配器内的 ImageView?
- android - 一个人如何返回多个屏幕?
- javascript - Angular JS 显示响应值
- php - Codeigniter - 需要帮助将图片上传到文件夹和数据库
- tensorflow - 如何获取数据以在 Kaggle 中训练我的神经网络模型?