[英]SQL Subquery/Left Join Issue
我正在一個學生進行測驗的項目中-有一些限定詞是,他們只能參加(按班級)注冊的測驗,並且每個測驗只能參加一次。 我已經弄清楚了大部分。.但是我正在處理一個SELECT語句,以便在下拉菜單中使用。 我有一個問題。
相關結構,僅包含列名:
因此,基本上,在完成測驗之后,所有結果都將轉到另一個名為“結果”的表中,但是還會在“完成”表中創建一個條目,其中記錄了用戶的ID和測驗ID。 然后,我執行以下SQL語句來填充下拉列表。
SELECT Quiz.QuizID, Quiz.QuizName
FROM Quiz
LEFT JOIN Complete ON Complete.QuizID = Quiz.QuizID
WHERE Complete.QuizID IS NULL
AND Quiz.Class = 'History'
哪個可行-從技術上講。 但是您會看到這里的問題是什么..如果“歷史記錄”課程中的某人參加了考試..那么“歷史記錄”課程中的其他人都無法參加該考試。 所以我必須用用戶ID分開。 我已經嘗試過類似的東西:
SELECT Quiz.QuizID, Quiz.QuizName
FROM Quiz
LEFT JOIN Complete ON Complete.QuizID = Quiz.QuizID
WHERE Complete.QuizID IS NULL
AND Quiz.Class = 'History'
AND Complete.UserID = (SELECT UserID
FROM User
WHERE UserID = '2')
其中“ 2”是會話用戶ID的占位符-也是測試者,因為我有兩個歷史記錄測試,並且我有一個條目說該學生參加了其中的一個。 但是我無法正常工作。
對我在這里做錯的任何幫助嗎?
將條件UserID
移到on
子句:
SELECT Quiz.QuizID, Quiz.QuizName
FROM Quiz
LEFT JOIN
Complete
ON Complete.QuizID = Quiz.QuizID
AND Complete.UserID = '2'
WHERE Complete.QuizID IS NULL
and Quiz.Class = 'History'
現在,它將僅查找用戶2
Complete
記錄。
這是您要找的東西嗎? 它將您的userId檢查移動到您的JOIN
條件:
SELECT Quiz.QuizID, Quiz.QuizName
FROM Quiz
LEFT JOIN Complete ON Complete.QuizID = Quiz.QuizID
AND Complete.UserID = 2
WHERE Complete.QuizID IS NULL
AND Quiz.Class = 'History'
通過在您的WHERE
條件中檢查userId,它使LEFT JOIN
。 如果Complete.UserId = 2,則Complete.QuizId絕不能為NULL
。
建議的其他解決方案應該可以使用,但是如果您想將where條件與join子句分隔開,我認為一個簡單的OR應該可以解決問題:
SELECT Quiz.QuizID,
Quiz.QuizName
FROM Quiz
LEFT JOIN Complete
ON Complete.QuizID = Quiz.QuizID
WHERE (Complete.QuizID IS NULL -- let's show the quiz never completed
OR
Complete.UserID <> 2 -- or completed by someone who isn't 2 :)
)
AND Quiz.Class = 'History'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.