2011-04-23 31 views
1
CREATE TABLE TR(STUDENT_ID int, SUBJECT_ID int, grade int); 
INSERT INTO tr SELECT * FROM results where results.STUDENT_ID=3; 
SELECT * FROM subjects LEFT JOIN tr ON subjects.SUBJECT_ID=tr.SUBJECT_ID; 
DROP TABLE TR; 

是否有可能將上述內容重寫爲一個查詢?我搜遍了整個網絡,仍然無法完成。我正在使用德比數據庫。你能爲我重寫嗎?左加入表和子查詢

這個想法是,我想連接表格主題,它有一定數量的行,如果有特定的學生有任何匹配的表結果的結果。如果沒有結果,我希望輸出行只包含表格主題的數據。所以,輸出行的數量將總是等於主題中的行數。

上面的代碼運行良好,但它在我的程序中給我帶來麻煩,因爲必須創建一個表。我想避免這種情況。

回答

1
SELECT * 
FROM subjects s 
LEFT JOIN (
    SELECT * FROM 
    results r 
    WHERE r.STUDENT_ID = 3 
) x ON s.SUBJECT_ID = x.SUBJECT_ID 
+0

非常感謝!完美的作品:) – Ivan 2011-04-23 18:56:39

0

基於上面給出的示例查詢,它可以作爲

SELECT subjects.* FROM 
subjects LEFT JOIN results 
ON subjects.SUBJECT_ID = results.SUBJECT_ID 
WHERE results.STUDENT_ID = 3; 

我還沒有和德比工作被改寫。但我認爲,這應該起作用。

0

SELECT * FROM subjects LEFT JOIN results ON subjects.SUBJECT_ID=results.SUBJECT_ID AND results.STUDENT_ID=3;

0

這應該是等同於

SELECT * FROM subjects 
LEFT JOIN results ON results.SUBJECT_ID = subjects.SUBJECT_ID AND results.STUDENT_ID = 3; 

假設你有一個特定的學生成績最爲一個條目。