动机:我正在设计一个访问数据库来跟踪员工的培训状态。每位员工都有基于其角色的培训要求(例如,管理员必须接受记录管理培训和电话礼仪,而电工必须采取危险的安全措施)。我希望能够生成一份报告,为每个人显示所需的所有培训,以及完成的培训课程,即完成日期。
架构我有以下表格:
PersonnelID
CourseID
RoleID
PersonnelID
CourseID
CompletionDate
已完成PersonnelID
RoleID
被分配到EffectiveDate
或从RoleID
中移除,生效日期为CourseID
qryPersonnelCourseRequirements
需要PersonnelID
我创建了一个查询 RoleID
,以便将SELECT qryLastLnkPersonnelRoleAddOnly.PersonnelID, LnkRolesCourses.CourseID
FROM qryLastLnkPersonnelRoleAddOnly INNER JOIN LnkRolesCourses
ON qryLastLnkPersonnelRoleAddOnly.RoleID = LnkRolesCourses.RoleID;
与当前LnkPersonnelCourses
所需的课程相匹配:
LnkPersonnelCourses
这是正常的,并告诉我每个人目前的培训要求:
以下是 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);
表的快照,其中显示了每个人已完成的课程和时间(数据是名义上的)。
问题:
当我尝试将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());
和
{{1}}
所需行为
我希望查询产生以下结果:
答案 0 :(得分:3)
您的查询存在的问题是您将PersonnelID
qryPersonnelCourseRequirements
表与ID
LnkPersonnelCourses
表进行比较,但您想将其与{{1}进行比较} PersonnelID
表来获得欲望输出。
尝试此查询:
LnkPersonnelCourses
这应该产生预期的结果。