SQL输出错误

时间:2011-02-07 00:18:34

标签: sql

enter image description here好的,所以我在这里处理4个表 - Project,Members,Iterations和ProjectIterationMembers。当我创建新项目详细信息时,我将它们写入Project表,我还指定了一个迭代(开始日期,结束日期 - 项目至少包含一次迭代,但之后可以添加更多迭代)。现在,Members表中的成员将被分配给迭代时写入ProjectIterationMembers表。

我要做的是以这种格式在datagridview中显示项目详细信息:

Project Name | Project Manager | Project Status

Project A    | Person A | In Progress
Project B    | Person B | In Progress

但是,当我添加新项目或新迭代时,我的输出是出于某种原因:

Project Name | Project Manager | Project Status

Project A    | Person A | In Progress
Project A    | Person B | In Progress
Project B    | Person A | In Progress
Project B    | Person B | In Progress

这是我的sql声明,谢谢你的帮助:

SELECT
    DISTINCT(Project.ProjectName), 
    Project.ProjectID, 
    Project.Status, 
    Project.CompanyID, 
    Project.StartDate, 
    m.MemberID, 
    m.FirstName + ' ' + m.LastName AS ProjectManager
FROM
    Project, 
    Member m, 
    ProjectIterationMember
WHERE
    m.CompanyRole = 'Project Manager'
    AND Project.CompanyID = '" + co_id + "'
    AND m.MemberID = ProjectIterationMember.MemberID
ORDER BY
    Project.StartDate DESC

2 个答案:

答案 0 :(得分:1)

据我所知,你可能错过了表Project和ProjectIterationMember之间的连接,并且你得到了笛卡尔联接。

我无法帮助你,因为我不知道你的ER图表或者至少是表格定义是什么样的。

编辑:从您的ERD,以下是应该如何显示:

FROM Project, Member m, ProjectIterationMember, ProjectIterationID pid 
WHERE m.CompanyRole = 'Project Manager'
  AND Project.CompanyID = '" + co_id + "'
  AND m.MemberID = ProjectIterationMember.MemberID
  AND pid.projectIterationID=ProjectIterationMember.ProjectIterationID
  AND pid.ProjectID=Project.ProjectID`

答案 1 :(得分:0)

如果每个迭代可以有一个项目经理 ,那么每次迭代都需要一行。

当然,您可以通过项目经理将它们组合在一起。或者你可以完全删除项目经理。