2013-07-18 62 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。似乎现在拉空白行,而不是什么都没有。感谢您指出这一点,现在只需要更深入地观察。 –