簡體   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