2012-04-25 65 views
0

我只是漫遊是以下查詢有效。我有一張名爲教授的表格,其中包含教授。表主題包含主題。包含professor_id和subject_id字段的professor_subject表實現了多對多關係。這是SQL查詢有效(多對多關係)

現在我需要看看哪位教授正在教授哪個科目。我寫了這個SQL查詢:

SELECT concat(professor.name, " ", professor.surname) as "Professor", 
     subject.name as "Subject" 
FROM professor_subject, subject, professor 
WHERE subject.id = subject_id 
    and professor.id = professor_id; 

該查詢是否有效?我的意思是,它會一直做我想要的嗎?我有點可疑,因爲我沒有使用JOIN關鍵字。

謝謝:)

+0

儘管Justin Niessner的回答是正確的,但您並不一定需要JOIN關鍵字來進行連接。你可以把他的解答也寫成'select concat(professor.name,「,professor.surname)作爲」Professor「,subject.name作爲」Subject「 from Professor,subject,professor_subject where professor.id = professor_subject.professor_id and professor_subject.subject_id = subject.id' – 2012-04-25 15:45:20

+0

@AlexMonthy:這就是我寫的,除了我很懶,所以我忽略了「professor_subject」。在subject_id和professor_id之前:) – xx77aBs 2012-04-25 15:49:14

回答

1

號這裏有沒有什麼相關的教授給對象。您正在使用不帶條件的交叉連接(不確定where子句中的subject_id和professor_id是否爲表值或查詢參數)。你需要這樣的東西:

select concat(professor.name, " ", professor.surname) as "Professor", 
     subject.name as "Subject" 
from professor 
inner join professor_subject 
    on professor.id = professor_subject.professor_id 
inner join subject 
    on professor_subject.subject_id = subject.id 
+0

學生?我認爲你的意思是主題。 subject_id和professor_id是professor_subject表中的字段 - 我用它們將教授關聯到主題。無論如何,謝謝你的查詢;) – xx77aBs 2012-04-25 15:47:34

1

假設subject_id和professor_id在professor_subject中,你沒事的。在JOIN關鍵字在所有版本的SQL(例如Oracle 9i之前的版本)中都可用之前,這就是連接完成的方式。