我需要幫助解決我必須使用 SQL 解決的問題。
使用 -JOIN 我必須顯示未注冊任何課程的學生。使用兩個表:db1.ncc.Student 和 db1.ncc.Registration。學生表有 4 個學生,在表注冊中,這四個學生中只有三個。
在我最后一次嘗試解決這個問題時,我嘗試使用 -LEFT JOIN 從學生表中獲取所有匹配項和不匹配的學生,然后我使用 -WHERE 嘗試將結果過濾為僅不匹配的學生。
我沒有成功,在嘗試了之前的許多其他方法后,我放棄了并開始尋求幫助。
select
STUDENT.StudentID
, STUDENT.StudentName
from db1.ncc.STUDENT left join db1.ncc.REGISTRATION on STUDENT.StudentID=REGISTRATION.StudentID
where REGISTRATION.StudentID<>STUDENT.StudentID
注意:我必須使用 join 來做到這一點
uj5u.com熱心網友回復:
你快到了。這LEFT JOIN
是一個好方法,但隨后在WHERE
您要檢查的子句中連接不匹配。不等式檢查不起作用,因為“缺失”值是NULL
,并且NULL != ...
始終為假。
相反,您可以顯式檢查注冊列的無效性:
select s.StudentID, s.StudentName
from db1.ncc.STUDENT s
left join db1.ncc.REGISTRATION r on r.StudentID=s.StudentID
where r.StudentID IS NULL
旁注:表別名(此處:s
和r
)使查詢更易于撰寫和閱讀。
uj5u.com熱心網友回復:
你很接近,但問題是如果學生不在 Registration 那么沒有匹配,因此它是 NULL,因此你不能使用像 =,<>,!= ...
select STUDENT.StudentID, STUDENT.StudentName from db1.ncc.STUDENT
left join db1.ncc.REGISTRATION
on STUDENT.StudentID=REGISTRATION.StudentID
where REGISTRATION.StudentID IS NULL;
PS:這個應該是愛好的東西,不然不建議用LEFT JOIN來做這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/536657.html
標籤:数据库
上一篇:SQL代碼回傳意外結果。如何糾正