好的,所以我在这里处理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
答案 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)
如果每个迭代可以有一个项目经理 ,那么每次迭代都需要一行。
当然,您可以通过项目经理将它们组合在一起。或者你可以完全删除项目经理。