sql时间查询超过/小于

时间:2011-12-20 16:25:44

标签: mysql

SELECT DISTINCT s.sname, s.sid
FROM student s, class c
WHERE s.programme = 'CS'
AND s.level = '2'
AND c.week_day = 'Mon'
AND meets_at < '12:00:00'
AND meets_at > '12:00:00';

我在这个查询中苦苦挣扎的是时间的一部分。我需要选择那些在上午和下午星期一上课的2级CS学生。它没有显示任何结果

Class:

ccode   | cname         | weekday | meets at | room  | tid
________________________________________________________________________
CIS166  | Intro to Comp | Tue     | 10:00:00 | MB300 | 1
________________________________________________________________________
CIS177  | Maths         | Mon     | 15:00:00 | MB100 | 6
________________________________________________________________________
CIS188  | Info Syst     | Thu     | 14:00:00 | MB230 | 5
________________________________________________________________________
CIS199  | Intro to Java | Fri     | 10:00:00 | MB300 | 4
________________________________________________________________________
CIS277  | Algorithmics  | Thu     | 14:00:00 | MB200 | 2
________________________________________________________________________
CIS288  | Database Syst | Mon     | 14:00:00 | MB142 | 1
________________________________________________________________________
CIS297  | Web Design    | Mon     | 16:00:00 | MB109 | 3
________________________________________________________________________
CIS298  | C++           | Fri     | 10:00:00 | MB110 | 8
Tutor:

    tid | tname
    _____________________
    1   | Rob Hoffman
    _____________________
    2   | James Butler
_____________________
3   | Kathy Bond
_____________________
4   | Theodora Stewart
_____________________
5   | Mike Richie
_____________________
6   | John Kay
_____________________
7   | Mary Tregear
_____________________
8   | Mark Robinson
Enrolled:

sid | ccode
______________
211 | CIS288
203 | CIS298
214 | CIS297
105 | CIS177
215 | CIS297
104 | CIS188
210 | CIS297
338 | CIS320
102 | CIS177
338 | CIS399
204 | CIS288
204 | CIS277
102 | CIS199
203 | CIS297
105 | CIS199
331 | CIS320
202 | CIS299
205 | CIS299
210 | CIS298
331 | CIS399
321 | CIS399
210 | CIS288
210 | CIS277
204 | CIS297
321 | CIS320
328 | CIS388
327 | CIS388
211 | CIS297
333 | CIS399
215 | CIS288
104 | CIS199
Student:

sid | sname        | programme | level | age
____________________________________________
101 | Lorry Ross   | CS         | 1     | 18
102 | Lydia Ken    | CIS        | 1     | 18
103 | Bob Chung    | CS         | 1     | 18
104 | Sonia Morris | CIS        | 1     | 18
105 | Mark Poppy   | CS         | 1     | 19
106 | Megan Chi    | IT         | 1     | 20
218 | Diana McDon  | IT         | 2     | 20
219 | Nick Smith   | IT         | 2     | 21

2 个答案:

答案 0 :(得分:1)

最后两个标准总是假的 - 你实际上想要和一个学生一起加入2个课程,所以你需要

SELECT DISTINCT s.sname, s.sid
FROM student s
INNER JOIN class cmorning ON <join criterium here>
INNER JOIN class cafternoon ON <join criterium here>
WHERE s.programme = 'CS'
AND s.level = '2'
AND cmorning.week_day = 'Mon'
AND cafternoon.week_day = 'Mon'
AND cmorning.meets_at < '12:00:00'
AND cafternoon.meets_at > '12:00:00'
GROUP BY s.sid
;

答案 1 :(得分:0)

这将返回将于周一参加多个CS课程的学生名单

SELECT DISTINCT s.sname, s.sid
FROM student s
INNER JOIN Enrolled e on s.sid = e.sid
INNER JOIN class day on day.ccode = e.ccode
WHERE s.programme = 'CS'
AND s.level = '2'
AND c.week_day = 'Mon'
GROUP BY s.sid
HAVING COUNT(s.sid) > 1