我有一个assignment
表,该表保存由特定班级的老师创建的作业。
assignment
表具有以下字段:
idAssignment (primary key),
classId (foreign key),
title,
assignmentDesc,
dateDue
我还有一个assignmentsubmissions
表格,该班级的学生可以将自己的意见书上传到作业中。
assignmentsubmission
表具有以下字段:
assignmentSubmissionId (primary key),
assignmentId (foreign key),
userId (foreign key),
submission
基本上,我想将assignmentsubmission
和assignment
一起加入特定班级的学生,以查看他们已完成和尚未完成的作业。
我尝试了许多不同的方法,但这是我当前的SQL命令:
SELECT *
FROM assignment
LEFT JOIN assignmentsubmission
ON assignment.idAssignment = assignmentsubmission.assignmentId
WHERE classId = 1234
AND ((userId = 1) OR (userId IS NULL))
该学生可能尚未将提交的内容上传到特定作业,因此在那种情况下,userId
的{{1}}将不存在,我想加入assignment
行{1}}。从目前的情况来看,仅显示已提交的作业,但我希望所有作业都带有提交或空提交字段返回。
我真的在这个问题上挣扎,所以非常感谢您的帮助。
答案 0 :(得分:0)
您步入正轨,但与学生的比较应该在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 ;
此版本引入了表别名,这些别名使查询更易于编写和阅读。请注意,所有列引用都是合格的-表示已识别原始表。