当前位置: 首页 > 知识库问答 >
问题:

LEFT JOIN查询未给出预期输出

戎亦
2023-03-14

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

模式I有以下表格:

  • 人员——列出员工信息,例如姓名、电话、电子邮件;键:personelid

我创建了一个查询qry人格化课程要求来匹配人格化课程要求到他们当前的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);

期望的行为:

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

共有1个答案

尹臻
2023-03-14

这两个查询的问题是,您将qryPersonnelCourseRequirements表的PersonnelIDLnkPersonnelCourses表的PersonnelID进行比较,但您应该将其与LnkPersonnelCourses表的PersonnelID进行比较,以获得所需的输出。

尝试以下查询:

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.PersonnelID );

这应该会产生预期的结果。

 类似资料:
  • 我有三个表,分别名为device_table、playlist_table和device_playlist_assoc device_playlist_assoc表用于将设备与播放列表相关联。 device_table playlist_table Device_PlayList_Assoc 所以,我想要的是那些没有播放列表的设备。我只从前端获得playlist_id作为参数。所以我想要一个sql

  • 这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?

  • 我有一个索引,其中我的每个对象都有状态字段,该字段可以有一些预定义的值。我想获取所有状态为“已启动”、“已更新”、“已删除”的查询,任何与这些匹配的,因此我使用Querybuilder和nativeSearchQuery,通过ElasticsearchOperations在控制台上打印的java创建了这个查询: 我的索引中有“INITIATED”状态的数据,但没有得到查询中提到的任何状态的人。请如

  • 我正在使用Spring data elasticsearch查询我的elastic文档。我的Elasticsearch实体类: 为了简洁起见,我还做了其他事情,比如设置存储库。数据搜索: Spring为上述调用生成的查询: 查询结果: 查看结果集,检查项目名称字段值,如包含方法!它没有检查完整的给定参数<为什么会这样?如何解决这些问题 Add:organizationId和projectName字

  • 问题内容: 所以我创建了一个集成脚本,但是由于某种原因它没有显示出正确的结果。我的查询是 结果中出乎意料的一行之一是这个 ID为11的组具有display_style_priority 2000而不是5200。它应显示具有display_style_priority 5200的用户组ID。这是该用户所在的排名最高的组。有人可以指出我做错了什么。 问题答案: 尝试将GROUP BY更改为 其他大多数

  • 我正在尝试在生产支持分支(即V3.1)上使用maven应用outOfOrder迁移。3.1分支有12个迁移3.1.0.13.1.0.12。前11个已经应用,在我的开发环境中,我已经应用了下一个版本3.3的两个迁移。信息如下所示: 我在 V3.1 分支中的 mvn 构建输出文件夹中运行以下命令: mvn 飞行方式:迁移 -Dflyway.outOfOrder=真 -P 我得到以下输出: [错误]未能