我有一个名为student的表,它具有以下字段:

idno(primary), lastname, status, password, syearid(foreign)

我的问题是我必须在每个school_year(syearid)中存储未投票的学生:



我有一张桌子,上面存储有已经投票的学生。我应该如何追踪未投票的学生?我应该再摆一张桌子吗?我的问题之一是,当学生在school_year(2015)或syearid(2000)中注册并投票时,将创建学生投票记录,当学生再次对下一个school_year进行投票时,它将在学生投票表中创建另一个记录,但是我的问题是如果学生在一生中只能注册一次,则该方法是如何存储该学生(主要是我的身份证号码,因此该学生无法再次注册,但注册时该学生的学年不变)。我该怎么办?

最佳答案

您不需要显式存储给定年份未投票的学生的记录。您可以简单地将学生加入投票表并检查是否为空。没有给定年份投票记录的学生将不会投票。我假设学生投票表中的syearid是投票年,而学生表中的syearid是学生开始上学的年份。

SELECT s.* FROM student s
LEFT JOIN student_votes sv ON (s.idno = sv.idno AND sv.syearid = 2015)
WHERE sv.syearid IS NULL


此外,假设只有特定年份的学生才有资格投票

SELECT s.* FROM student s
LEFT JOIN student_votes sv ON (s.idno = sv.idno AND sv.syearid = 2015)
WHERE sv.syearid IS NULL
AND s.syearid IN (2012, 2013, 2014, 2015)

10-07 13:58