我是SQL新手,我甚至无法启动此查询。
如果学生在“2012”中有记录,请列出该记录及其以前的所有记录。
简化数据集:
ASSIGNMENTS STUDENT_ID BOOK_TITLE TERM
001 MOBY DICK 2009 002 ULYSSES 2009 003 HAMLET 2009 004 1984 2009 005 HAMLET 2009 004 WAR & PEACE 2010 003 THE TRIAL 2010 004 MOBY DICK 2011 001 -NULL---- 2012 004 -NULL---- 2012
结果应该是在特定学期注册的学生的记录,然后是该学生之前的记录。目标是让用户查看当前注册的学生(书名中的NULL值)并确保他们没有分配学生已阅读的书。
STUDENT_ID BOOK_TITLE TERM 001 -NULL---- 2012 001 MOBY DICK 2009 004 -NULL---- 2012 004 MOBY DICK 2011 004 WAR & PEACE 2010 004 1984 2009
任何指针/起始方向都将非常感谢!我已经尝试过使用'with',多个内连接,但我没有得到任何地方。我一直在考虑if..then语法在SQL中不起作用吗?
答案 0 :(得分:2)
SELECT STUDENT_ID, BOOK_TITLE, TERM
FROM ASSIGNMENTS
WHERE STUDENT_ID IN
(SELECT DISTINCT STUDENT_ID FROM ASSIGNMENTS WHERE TERM = 2012)
ORDER BY STUDENT_ID, TERM DESC
首先,我创建了一个符合您预期结果格式的查询。然后我添加了“只有当前注册的学生”的标准。
如果你想参数化它,可以使用@Term而不是2012.你也可以使用WHERE BOOK_TITLE IS NULL
答案 1 :(得分:0)
我不知道那些-NULL ----值是代表实际值还是NULL值。假设后者,这是一种方法:
SELECT student_id, book_title, term
FROM assignments
WHERE student_id IN ( SELECT student_id FROM assignments WHERE book_title IS NULL )
更好的方法可能是根据学生是否注册当年的学期来检索数据。如何做到这将取决于您的RDBMS和版本。