2014-02-25 66 views
1

我正在嘗試編寫一個SQL查詢,該查詢返回大學課程的模塊編號及其標題列表以及該模塊及其標題的先決條件列表。這意味着,輸出應該類似於:基於FK的解析屬性

Module | Module Title | Prerequisite | Prerequisite Title 
C1930 | Computing | C1100  | Basic Computing 
C1930 | Computing | C1500  | Intermediate Computing 
T1350 | Textiles  | T1100  | Sewing 

表類型如下:

模塊(moduleNumber,MODULENAME);

前提條件(moduleNumberprerequisiteNumber);

我的問題是解決prerequisteNumber作爲moduleName。我可以看到它可能需要是一個子查詢或使用某種JOIN(INNER JOIN是我如何嘗試它),但我似乎無法讓它工作。

我的查詢嘗試如下:

SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite", p.prerequisiteNumber as "Prerequisite Title" 
FROM Module m, Prerequisite p 
WHERE p.moduleNumber = m.moduleNumber 
OR p.prerequisiteNumber = m.moduleNumber 

和:

SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite" 
FROM Module m 
INNER JOIN Prerequisite s 
ON m.moduleNumber = p.moduleNumber 
INNER JOIN 
(
    SELECT m.moduleName as "Prerequisite Title" 
    FROM Module m, Prerequisite p 
    WHERE m.moduleNumber = p.moduleNumber 
) 

這兩者都不提供給我我想要的結果。我覺得第一個比第二個更接近,但我似乎無法在其中任何一個方面取得進一步進展。我試着四處搜尋,但我甚至不知道如何描述這個問題,更不用說從哪裏開始尋找幫助。

謝謝你的時間。

編輯:

下面是模塊例如數據和前提表:

模塊

moduleNumber | moduleName 
C1930  | Computing 
C1100  | Basic Computing 
C1500  | Intermediate Computing 
T1350  | Textiles 
T1100  | Sewing 

前提

moduleNumber | prerequisiteNumber 
C1930  | C1100 
C1930  | C1500 
T1350  | T1100 

回答

1

如果你的先決條件是在模塊那麼桌子可能是什麼使用ANSI SQL

SELECT m.moduleNumber as "Module", 
     m.moduleName as "Module Title", 
     p.moduleNumber as "Prerequisite", 
     p.moduleName as "Prerequisite Title" 
FROM Module m JOIN 
    Prerequisite mp ON m.moduleNumber = mp.moduleNumber JOIN 
    Module p ON p.moduleNumber = mp.prerequisiteNumber 

:使用舊的SQL或

SELECT m.moduleNumber as "Module", 
     m.moduleName as "Module Title", 
     p.moduleNumber as "Prerequisite", 
     p.moduleName as "Prerequisite Title" 
FROM Module m, Module p, Prerequisite mp 
WHERE m.moduleNumber = pm.moduleNumber and p.moduleNumber = pm.prerequisiteNumber 

:你正在尋找的。

+0

嗯。我可以看到你要去哪裏,但它輸出的是同一組數據兩次 - 我將示例數據添加到顯示示例的原始文章中。 – Paul

+0

已編輯 - 我認爲這應該使情況更清楚 - 抱歉的誤解。 – Paul

+0

這是我假設的一組數據。我不明白它是如何給出重複的。我會審查。 – albe