2013-07-18 58 views
1

我想寫一個查詢,將檢索一些列(真是一個驚喜!)。除了簡單的查詢,特別是在Access中,我感到非常可怕。以下是Access中查詢設計器的圖像。如何編寫此查詢以獲取我需要的內容?

enter image description here

底部的字段是我期待拉回來的字段。 project_master.ContactDesigner是contacts.ContactID的外鍵。我想獲取ID 2,3和4的MilestoneNames的列表。然後例如說,MilestoneID 2具有Project Initiation的MilestoneName,我想爲具有開始和結束日期的多個項目記錄一個記錄在該MilestoneID的project_milestone_dates中列出綁定到外鍵project_master.ContactDesigner的每條記錄的聯繫人名稱。例如,這隻需要抓取ProjectPriority爲2的記錄。

不知道這是否清楚,因爲我很難解釋我在這裏尋找的東西,但我缺少標準或甚至需要添加到查詢中的某些ID?我很迷茫。當前的設計不會在列中返回任何內容。

SELECT milestone_def.milestonename, 
     contacts.firstname, 
     priority_def.priorityname, 
     project_milestone_dates.startdate, 
     project_milestone_dates.enddate, 
     milestone_def.milestonedefid 
FROM (project_milestone_dates 
     INNER JOIN (priority_def 
        INNER JOIN (contacts 
           INNER JOIN project_master 
             ON (contacts.contactid = 
              project_master.contactdesigner)) 
          ON priority_def.prioritydefid = 
           project_master.projectpriority) 
       ON project_milestone_dates.projectid = 
        priority_def.prioritydefid) 
     INNER JOIN milestone_def 
       ON project_milestone_dates.milestoneid = 
        milestone_def.milestonedefid 
WHERE (((project_master.projectpriority) = [@priority]) 
     AND ((milestone_def.milestonedefid) = 5 
       OR (milestone_def.milestonedefid) = 6 
       OR (milestone_def.milestonedefid) = 7)); 

更改爲5或6或7,因爲它應該是。

編輯*

我已經刪除線AND(contacts.ContactID = project_master.ContactOwner),因爲我並不需要在查詢中。

+0

您可以發佈此查詢的SQL命令的版本?我在Access GUI知識中生疏。 「= 2或3或4」看起來有點嫌疑。 –

+0

已添加SQL ...... –

+0

'INNER JOIN'只在連接的字段不爲空時才返回行;否則它不會返回。如果你需要能夠返回一行,即使連接字段爲空,也可以使用'LEFT JOIN'。不知道這是否是問題,因爲我看不到您的數據,但對於沒有經驗的SQL用戶來說這是一個常見的問題,所以我會提及它。 –

回答

1
project_milestone_dates.ProjectID = priority_def.PriorityDefID 

這看起來像一個糟糕的連接。

它不應該是?:

project_milestone_dates.ProjectID = priority_def.projectid 

移動的project_milestone_date表,以便它直接連接到project_master,而不是priority_def

+0

我已將其更改爲= project_master.ProjectID。似乎現在拉空白行,而不是什麼都沒有。感謝您指出這一點,現在只需要更深入地觀察。 –