SQL:查找ID子集的所有先前记录

时间:2012-03-12 16:11:03

标签: sql

我是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中不起作用吗?

2 个答案:

答案 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和版本。