我有一个表格,其中包含当前正在上课的所有学生的详细信息,如下所示:
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;
但这不会返回任何数据。我不确定如何从这里继续。任何帮助将不胜感激。
答案 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