【发布时间】:2012-07-28 05:39:27
【问题描述】:
我有两个这样的MySQL-tables:
desc students;
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| student_id | int(11) | NO | PRI | NULL |
| student_firstname | varchar(255) | NO | | NULL |
| student_lasttname | varchar(255) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
desc studentabsence;
+---------------------------+-------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+-------------+------+-----+---------+
| student_absence_id | int(11) | NO | PRI | NULL |
| student_id | int(11) | YES | | NULL |
| student_absence_startdate | date | YES | | NULL |
| student_absence_enddate | date | YES | | NULL |
| student_absence_type | varchar(45) | YES | | NULL |
+---------------------------+-------------+------+-----+---------+
然后我有这个MySQL- 查询来列出学生。
查询:
SELECT s.student_id, s.student_firstname, s.student_lastname,
a.student_absence_startdate, a.student_absence_enddate, a.student_absence_type
FROM students s LEFT JOIN studentabsence a ON a.student_id = s.student_id
只要学生有缺勤信息,就会显示在列中
a.student_absence_startdate a.student_absence_enddatea.student_absence_type
有时一个学生在studentabsence 表中有两行或多行,然后他会被列出两次。
我的问题是是否有任何方法可以在查询中更具体。我想列出来自db.students 和的所有学生,如果db.studentabsence 中有一行 date 在 startdate 和 enddate 之间(例如 2012-07-30 ) 列出学生一次与此缺席信息。仅当日期匹配时。
比如……
... WHERE (a.student_absence_startdate OR a.student_absence_enddate) IS NULL OR
'2012-07-30' BETWEEN a.student_absence_startdate AND
a.student_absence_enddate ...
这有点难以解释,所以如果您需要更多信息,请告诉我......
【问题讨论】: