我正在为学生组织开发数据库。该数据库的一个特征是记录学生参加活动的情况。如果学生没有参加活动,则不会输入他们缺席的情况。为了让学生参加活动,他们必须注册。下表用于此过程:
STUDENT
Student_ID int (pk),
Student_M,
First_Name,
Last_Name,
Gender,
Email,
Phone,
Degree,
Grad_Term,
Grad_Year,
STUDENT_ENROLLMENT
Enrollment_ID (pk),
Student_ID (fk),
Term,
Year,
Status,
STUDENT_ATTEND
Att_ID (pk),
Enrollment_ID (fk),
Event_ID (fk),
EVENT
Event_ID (pk),
Event_name,
Location,
Term,
Year,
Date,
Time,
Description,
Cost,
Dress_code,
Require,
我的目标是编写一个显示缺乏出勤率的查询。在这个查询中,我试图提取学生的姓名和电子邮件以及他们未参加的所有活动的清单(WHERE event.require =' Y')。我尝试了多种写作方式,其中很多都包含了很多观点,但没有运气。如果有人在这里有任何创造性的想法,它可能真的有帮助!
由于
答案 0 :(得分:1)
您需要在学生和活动之间进行交叉联接,以获得这两者的所有可能组合。然后过滤所需的事件,其中学生和事件之间没有链接。
select * from student s cross join event e
where e.Require = 1
and not exists
(
select * from STUDENT_ATTEND sa
inner join STUDENT_ENROLLMENT se
on se.Enrollment_ID = sa.Enrollment_ID
where sa.Event_ID = e.Event_ID
and se.Student_ID = s.Student_ID
)