繁体   English   中英

在条件可能为null的情况下向左联接表,如果条件为null,则联接空列

[英]Left Join table on condition which may be null and join null columns if condition is null

我有一个assignment表,其中存放着由特定班级的老师创建的作业。

assignment表具有以下字段:

idAssignment (primary key), 
classId (foreign key), 
title, 
assignmentDesc, 
dateDue

我也有一个assignmentsubmissions表,该班的学生将他们的意见书上传到作业中。

assignmentsubmission表具有以下字段:

assignmentSubmissionId (primary key), 
assignmentId (foreign key), 
userId (foreign key), 
submission

基本上,我想加入assignmentsubmissionassignment一个学生在一个特定的类,看看他们已经完成和未完成的任务。

我尝试了许多不同的方法,但这是我当前的SQL命令:

SELECT * 
FROM assignment 
  LEFT JOIN assignmentsubmission 
    ON assignment.idAssignment = assignmentsubmission.assignmentId 
WHERE classId = 1234 
    AND ((userId = 1) OR (userId IS NULL))

学生可能尚未将提交上传到特定的作业,因此在那种情况下,该assignmentuserId将不存在,而我想加入null行进行assignmentsubmission提交。 就目前而言,仅显示已提交的作业,但我希望所有作业都带有提交或空提交字段返回。

我真的在这个问题上挣扎,所以任何帮助将不胜感激,谢谢。

您的方向正确,但与学生的比较应该在ON子句中:

SELECT a.*, (asu.userId IS NOT NULL) as completed_flag
FROM assignment a LEFT JOIN
     assignmentsubmission asu
     ON a.idAssignment = asu.assignmentId AND
        asu.userId = 1
WHERE a.classId = 1234 ;

此版本引入了表别名,这些别名使查询更易于编写和阅读。 请注意,所有列引用都是合格的-表示已识别原始表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM