2010-07-26 114 views
1

我正在使用SQL首次加入相對於很多的表,我有錯誤與此:加入多個表的查詢涉及

我有三個表,

學期表

StudentID Department Semester 
1   1   1 

課程表

CourseID CourseName Semester 
1   S.E   1 
2   D.B   1 

ExamAttend表(外鍵StudentID和CourseID )

StudentID CourseID Marks 
1   1  88 
1   2  90 

我試圖通過

Select CourseName,Marks 
from CourseID 
Inner Join ExamAttend on (
    Select CourseID from Course as c, Semester as s where s.Semester = c.Semester 
) = ExamAttend.CourseID; 

得到reslut此查詢顯示我的錯誤子查詢不能返回多個查詢與「=」使用

任何人都可以建議我當方法來完成查詢?我是否缺少內連接的任何語法?

+1

你沒有學生表。它在哪裏? – hgulyan 2010-07-26 09:09:38

+0

@hgulyan我有學生表... 學期表爲我存儲現在的sem .. – 2010-07-26 09:36:20

回答

2
SELECT CourseName,Marks 
FROM Course C INNER JOIN ExamAttend E 
ON C.CourseID = E.CourseID 
INNER JOIN Semester S 
ON S.StudentID = E.StudentID 
3

嘗試用單獨的每個表加盟:

SELECT 
    CourseName, 
    Marks 
FROM Course 
INNER JOIN Semester 
ON Semester.StudentID = ExamAttend.StudentID 
INNER JOIN ExamAttend 
ON CourseID.CourseID = ExamAttend.CourseID 
AND ExamAttend.SemesterId = Semester.SemesterId 
+0

學生表也在那裏.. 但我在學期表中包含了一個當前的學生學期紀錄.. 我想要「學期表和課程表和ExamAttend表「加入.. :( – 2010-07-26 09:29:02

+0

@Nagaraj:對不起,我認爲這是一個錯誤之前的問題。 – 2010-07-26 09:32:57

+0

我已經寫了學期..有人編輯它錯了我又做了更改..謝謝反正:) – 2010-07-26 09:35:33

2

試試這個

SELECT  Semester.StudentID, Course.CourseID.CourseName, ExamAttend.Marks 
FROM   ExamAttend INNER JOIN 
         Semester ON ExamAttend.StudentID = Semester.StudentID INNER JOIN 
         Course ON ExamAttend.CourseID = Course.CourseID 
1

當聯接表你能做的最好的事情是:首先,它寫在紙上,並用數學集合代數。如果你有三個表:學生,課程,考試成績,你可以這樣寫:(學生和(課程和考試成績))使用這個AND可以被INNER JOIN替換,寫作:(學生內部加入(課程內部加入考試) ))。

因爲你要設置distincted列,這樣就解決到:學生內部連接(課程內加入ExamAttend在Course.CourseID = ExamAttend.CourseID)在Student.StudentID = ExamAttend.StudentID

SQL分析器首先會建立一個Course和ExamAttend的投影,第二個投影與Student。

如果你想對所有的學生進行投影,即使學生沒有一門課程的成績或任何其他的,你可以寫在你的收藏代數: 學生OR(課程和ExamAttend),其中OR可以是左外部連接。

請注意,您選擇了正確的表格,您可以在其中按照您想要加入的表格的路徑。有幾種解決方案,選擇錯誤的解決方案會導致查詢緩慢。

希望它有幫助。