SQL查询以检查另一个表中是否不存在记录

时间:2019-04-22 12:40:41

标签: sql sqlite join

我有一个表格,其中包含当前正在上课的所有学生的详细信息,如下所示:

CREATE TABLE studentInClass(
studentID int,
classID int,
FOREIGN KEY(studentID) references students(studentID),
foreign key(classID) references class(classID)
);

还有另一个表格,其中包含为课程付费的学生的详细信息:

CREATE TABLE fees(
feesID INTEGER PRIMARY KEY AUTOINCREMENT, 
StudentID INTEGER, 
AmountPaid INT, 
Date DATE, 
FOREIGN KEY(StudentID) REFERENCES students(StudentID));

我想做的是检查某个班级的学生是否没有为此班付费。我正在努力编写一个这样做的SQL查询。我已经尝试过多个查询,例如:

Select studentInClass.StudentID
from fees, studentInClass 
where fees.StudentID = studentInClass.StudentID;

但这不会返回任何数据。我不确定如何从这里继续。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

您想要outer join

select s.StudentID, (case when f.AmountPaid is not null 
                          then 'Yes' 
                          else 'No' 
                     end) as Is_fees_paid
from studentInClass s left join
     fees f
     on f.StudentID = s.StudentID; 

答案 1 :(得分:1)

不存在:

select s.*
from studentInClass s
where not exists (
  select 1 from fees
  where studentid = s.studentid
) 

通过此操作,您可以从表studentInClass中获得所有行,而表fees中没有该行的学生证。
尚不清楚是否还需要检查日期。

答案 2 :(得分:0)

请检查:

select studentInClass.StudentID
from studentInClass inner join fees ON fees.StudentID = studentInClass.StudentID