2013-10-13 137 views
1

我仍然是數據庫和MySQL的新手,我想學習如何使用JOINs。我很抱歉,我不知道這個案件的話。我希望你們所有人都能通過查看這些數據來理解。下面是與記錄表:選擇基於其他表的數據

student_name | semester | subject_id | comp_id | mark 
------------------------------------------------------- 
Connor  1   24   1   9 
Connor  null  24   2   null 
Connor  null  24   3   null   

有任何人能幫助我:

Table student 
student_id | student_name 
------------------------- 
1   Ana 
2   Billy 
3   Connor 

Table comp 
comp_id | subj_id | comp_name 
-------------------------- 
1   24   Run  
2   24   Swim  
3   24   Jump 
4   25   Eat  

Table comp_mark 
semester | subj_id | student_id | comp_id | mark 
------------------------------------------------- 
1   24  1   1   7 
1   24  1   2   4 
1   24  1   3   6 
1   24  2   1   4 
1   24  2   2   8 
1   24  3   1   9 

我從查詢中選擇comp_mark表(更新)預期的結果是這樣的?感謝一噸

它由student_name UPDATE

我已經試過這(紀堯姆Poussel的查詢)和ORDER:

SELECT s.student_name, cm.semester, c.subj_id AS subject_id, c.comp_id, cm.mark 
FROM student s 
CROSS JOIN comp c 
LEFT JOIN comp_mark cm ON s.student_id = cm.student_id 
AND cm.subj_id = c.subj_id 
AND cm.comp_id = c.comp_id 
ORDER BY s.student_name 

結果: enter image description here

+0

向我們展示你到目前爲止嘗試了什麼? – thebjorn

+0

'和cm.semester ='1' AND cm.subj_id ='1''semester和subj_id不是字符列,而是INTEGER。你應該將它們與int值進行比較,如'AND cm.semester = 1 AND cm.subj_id = 1'(我知道mysql會自動執行此類型轉換,但這也應該被認爲是一個嚴重的缺陷) – wildplasser

+0

要過濾掉不需要,只需添加一個WHERE子句。例如,'WHERE cmm.subj_id = 24 AND cm.student_id = 4' –

回答

1

試試這個:

SELECT s.student_name, cm.semester, c.subj_id AS subject_id, c.comp_id, cm.mark 
FROM student s 
CROSS JOIN comp c 
LEFT JOIN comp_mark cm ON s.student_id = cm.student_id AND cm.subj_id = c.subj_id AND cm.comp_id = c.comp_id 
0

認爲您需要添加一個跨喬從comp中獲得所有可能的值。類似這樣的: -

SELECT s.student_name, c.subj_id, s.student_id, c.comp_id, cm.mark 
FROM student s 
CROSS JOIN comp c 
LEFT OUTER JOIN comp_mark cm 
ON s.student_id = cm.student_id 
AND cm.semester = '1' 
AND cm.subj_id = '1'