2012-03-12 78 views
0

我是SQL的新手,我甚至無法啓動此查詢。
SQL:查找所有以前的記錄的ID的子集

如果學生在'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 

任何指針/開始的方向將不勝感激!我曾嘗試過與'與',多個內部連接,但我沒有得到任何地方。我一直在考慮如果..那麼在SQL中不起作用的語法?

+0

你使用什麼數據庫引擎(和版本)? – Lamak 2012-03-12 16:13:40

+0

我使用Oracle SQL developer 3.0 – Kate 2012-03-12 16:23:21

回答

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 

要想出這個答案,我首先創建了一個匹配您的預期結果格式的查詢。然後,我添加了「只有當前註冊的學生」的標準。使用WHERE BOOK_TITLE IS NULL

+0

謝謝!這工作完美。我完全超越自己想着加入。 – Kate 2012-03-12 16:35:53

0

如果你想參數它把@Term,而不是2012年。你也可以運行它關閉空書名我不知道那些-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和版本。

相關問題