2011-02-07 64 views
1

enter image description here好的,所以我在這裏處理4個表格 - Project,Members,Iterations和ProjectIterationMembers。當我創建新的項目詳細信息時,我將它們寫入到Project表中,並且還指定了一個迭代(開始日期,結束日期 - 一個項目至少包含一次迭代,但之後可以添加更多迭代)。現在將會員表中的成員寫入ProjectIterationMembers表中,因爲它們被分配給迭代。錯誤的SQL輸出

我所試圖做的是顯示項目的詳細信息,在這種格式的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 

回答

1

據我看到你的sql,你可能會失去表項目和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` 
+0

項目的PK是專案編號,再有就是與迭代表{ProjectIterationID的關係 - PK,專案編號 - FK },迭代到ProjectIterationMember {ProjectIterationMemberID - PK,ProjectIterationID - FK,MemberID - FK},最後Member與ProjectIterationMember有關係{MemberID - PK} – MiziaQ 2011-02-07 00:43:41

0

如果可以有一個項目經理每次迭代,你必須期望每迭代一行。

當然,您可以將它們組合在一起由項目經理。或者你可以完全刪除項目經理。