LEFT JOIN查询未给出预期输出

时间:2016-08-06 16:30:01

标签: sql ms-access relational-database

动机:我正在设计一个访问数据库来跟踪员工的培训状态。每位员工都有基于其角色的培训要求(例如,管理员必须接受记录管理培训和电话礼仪,而电工必须采取危险的安全措施)。我希望能够生成一份报告,为每个人显示所需的所有培训,以及完成的培训课程,即完成日期。

架构我有以下表格:

  • 人员 - 列出员工信息,例如姓名,电话,电子邮件; key:PersonnelID
  • 课程 - 列出所有可用课程并给出说明; key:CourseID
  • 角色 - 列出公司的所有工作角色(例如电工,行政助理); key:RoleID
  • LnkPersonnelCourses - 记录显示PersonnelID CourseID CompletionDate已完成PersonnelID
  • LnkPersonnelRole - 记录显示RoleID被分配到EffectiveDate或从RoleID中移除,生效日期为CourseID
  • LnkRolesCourses - 记录显示qryPersonnelCourseRequirements需要PersonnelID

我创建了一个查询 RoleID ,以便将SELECT qryLastLnkPersonnelRoleAddOnly.PersonnelID, LnkRolesCourses.CourseID FROM qryLastLnkPersonnelRoleAddOnly INNER JOIN LnkRolesCourses ON qryLastLnkPersonnelRoleAddOnly.RoleID = LnkRolesCourses.RoleID; 与当前LnkPersonnelCourses所需的课程相匹配:

LnkPersonnelCourses

这是正常的,并告诉我每个人目前的培训要求:

TrainingRequirements

以下是 SELECT pcr.PersonnelID, pcr.CourseID, lpc.CompletionDate FROM qryPersonnelCourseRequirements AS pcr LEFT JOIN LnkPersonnelCourses AS lpc ON (pcr.CourseID = lpc.CourseID) AND (pcr.PersonnelID = lpc.ID); 表的快照,其中显示了每个人已完成的课程和时间(数据是名义上的)。

LnkPersonnelCourses Table

问题: 当我尝试将SELECT lpc.PersonnelID, lpc.CourseID, lpc.CompletionDate FROM qryPersonnelCourseRequirements AS pcr LEFT JOIN LnkPersonnelCourses AS lpc ON (pcr.CourseID = lpc.CourseID) AND (pcr.PersonnelID = lpc.ID); 中记录的个人培训记录与上述查询中的培训要求相匹配时,它仅显示个人完成了单个课程,而实际上,该个人已经完成了多个课程课程,以满足他们的培训要求。我曾尝试过多种方式的查询。这里和我一样接近:

System.setProperty("webdriver.chrome.driver","C:\\Selenium\\Drivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("http://toolsqa.com/automation-practice-table/");


WebElement body = driver.findElement(By.xpath("//*[@id='content']/table/tbody"));
List<WebElement> rows = body.findElements(By.tagName("tr"));
System.out.println(rows.get(0).findElement(By.xpath("//td[2]")).getText());
System.out.println(rows.get(1).findElement(By.xpath("//td[2]")).getText());
System.out.println(rows.get(2).findElement(By.xpath("//td[2]")).getText());
System.out.println(rows.get(3).findElement(By.xpath("//td[2]")).getText());

LEFT JOIN with pcr

{{1}}

LEFT JOIN with lpc

所需行为

我希望查询产生以下结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

您的查询存在的问题是您将PersonnelID qryPersonnelCourseRequirements表与ID LnkPersonnelCourses表进行比较,但您想将其与{{1}进行比较} PersonnelID表来获得欲望输出。

尝试此查询:

LnkPersonnelCourses

这应该产生预期的结果。