如何编写此查询以获取我需要的内容?

时间:2013-07-18 17:31:52

标签: sql ms-access

我正在尝试编写一个可以检索某些列的查询(多么令人惊讶!)。除了简单的查询之外,我对其他任何东西都非常糟糕,特别是在Access中。下面是Access中查询设计器的图像。

enter image description here

底部的字段是我想要撤回的字段。 project_master.ContactDesigner是contacts.ContactID的外键。我想得到ID为2,3和4的MilestoneNames列表。然后比如说,MilestoneID 2有一个项目启动的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)行,因为我在查询中不需要它。

1 个答案:

答案 0 :(得分:1)

project_milestone_dates.ProjectID = priority_def.PriorityDefID

这看起来像是一个糟糕的联接。

不应该吗?:

project_milestone_dates.ProjectID = priority_def.projectid

移动project_milestone_date表,使其直接连接到project_master,而不是priority_def