2014-10-09 48 views
0
select distinct ID, title, takes.course_id 
from course join takes 
    on course.course_id = takes.course_id 
where takes.course_id in 
(select takes.course_id 
from takes 
where ID = '10204'); 

select ID, title, takes.course_id 
from course join takes 
    on course.course_id = takes.course_id 
where ID = '10204'; 

我要查詢的過程中ID和一個學生ID爲10204取課程名稱。第一個結果是5000行,這是不正確的。第二個給出了正確的結果。那麼第一個有什麼問題呢?爲什麼兩個查詢的結果不同?

回答

-1

因爲takes.ID!= course.ID。第一次使用takes.ID在WHERE子句中,但您使用course.ID

+0

如果'ID'是一個不明確的列名,你會得到一個錯誤。 – Thilo 2014-10-09 03:02:07

+0

在第一個查詢中(選擇takes.course_id from where ID ='10204')這顯然是where子句中的take.ID。 第二個查詢(從課程連接中選擇ID,標題,takes.course_id參加course.course_id = takes.course_id 其中ID ='10204';)在where子句中顯然是course.ID。 你瘋了嗎? – jewelnguyen8 2014-10-09 03:12:00

0

那麼這是可以在第一次查詢是因爲您quering其中takescourse_id等於在一個特定的course_id第二表(它可以不是唯一的

,並在第二個查詢您所查詢筆直其中course_id等於該表中的unique ID

1

第一個查詢爲您提供所有碰巧需要10204課程的學生的數據。

1

基本上,第一個查詢可以被理解爲「查找所有課程以及學生採取他們,任何課程也是由學生10204採取的」。您可以將第一個查詢看作3路加入。子查詢select takes.course_id from takes where ID = '10204'的結果將是「第三」表。

1

添加到樁上,因爲每個人似乎都提供的點點滴滴,其中有一些是奇怪的憤怒......

第一個查詢表示「給我的信息對學生和課程在課程也由學生10204" 採取

第二個查詢說:‘給我對學生採取的學生和課程信息10204’

你說你想獲得由學生10204所學課程的課程ID和標題,所以顯然第二個查詢是正確的。你不關心其他學生已經參加過相同的課程。

或許,將其投入角度來看,重寫第一,和不正確的查詢會有所幫助:

select distinct ID, title, takes.course_id 
from course 
    join takes 
     on course.course_id = takes.course_id 
    join takes as takes2 
     on takes.course_id = takes2.course_id 
WHERE 
    takes2.ID = '10204'); 
0

感謝你們。我認爲我的問題是我沒有意識到其他學生可以與ID爲10204的學生一起參加相同的課程。因此,雖然條件是僅詢問學生10204的課程,但結果全部是關於所採取的課程由10204和其他學生共同完成。

相關問題