mysql - 尽管使用了 IS NOT NULL,但 MySQL Left Join 返回不相关的记录
问题描述
以下带有左连接的查询返回在最终左连接上没有匹配项的记录,即评估列为空,尽管我的查询带有IS NOT NULL
.
应该如何更改查询以获取匹配的记录?
基本上我想根据查找表中的相关评估返回 unit_outcome 记录 GROUPED。
用于 LEFT JOIN 的 DB Fiddle显示用于评估的空记录
SELECT *
FROM unit
left JOIN unit_unit_outcome_lookup
ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
left JOIN unit_outcome
ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
left JOIN unit_outcome_assessment_lookup
ON unit_outcome_assessment_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk IS NOT NULL
left JOIN assessment
ON assessment.assessment_pk = unit_outcome_assessment_lookup.assessment_fk IS NOT NULL
AND unit.unit_pk ='1'
没有空记录的 INNER JOIN的 DB Fiddle - 如何通过评估对 unit_outcomes 进行分组?
解决方案
SELECT MAX((unit.unit_pk)) AS unit_pk,
GROUP_CONCAT(unit_outcome.unit_outcome) unit_outcomes,
MAX(assessment.assessment) assessment,
GROUP_CONCAT(unit_outcome.unit_outcome_pk) unit_outcome_pks,
assessment.assessment_pk
FROM unit
INNER JOIN unit_unit_outcome_lookup
ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
INNER JOIN unit_outcome
ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
INNER JOIN unit_outcome_assessment_lookup
ON unit_outcome_assessment_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk
INNER JOIN assessment
ON assessment.assessment_pk = unit_outcome_assessment_lookup.assessment_fk
AND unit.unit_pk ='1'
GROUP BY assessment_pk;
PS。详细信息可以在问题的评论中找到。
推荐阅读
- docker - 无法使用 System.InvalidOperationException 启动 Kestrel:无法配置 HTTPS 端点
- ruby - 实例变量不在方法之间共享
- jquery - 如何在事件侦听器中覆盖事件阻止默认值?
- javascript - for循环向jQuery中的多个输入字段添加点击功能没有按预期工作
- bootstrap-4 - Bootstrap Tour 未开始
- flutter - 如何摆脱颤动中的appbar和tabbar之间的空间?
- reactjs - 在 Material UI DateTimePicker 中禁用过去一小时
- jsp - 如何拆分两个参数并根据它们创建标签和输入字段
- android - 如何通过按钮在Android中初始化onDraw
- c# - 尝试在 C# 中的表格单元格上写入时出错