2017-08-09 31 views
0

不同的價值觀,我想使用外鍵的不同值水平選擇一列一列。從另一個表這個外鍵引用名gradingperiod_id檢索使用外鍵

first | second 
    80  81 

等級:

grade_id | grade | gradingperiod_id 
    1   80   7001 
    2   81   7002 

gradeperiod_mt:

gradeperiod_id | period 
    7001   1 
    7002   2 

student_grade:

student_grade_id | student_id | grade_id 
     1   20140540  1 
     2   20140540  2 

我想這樣的查詢,但這些垂直給我多行具有相同的值。

first | second 
    80  80 
    81  81 

SELECT 1st.grade AS first, 2nd.grade as second FROM student_grade sg 
INNER JOIN grade 1st ON 1st.grade_id = sg.grade_id 
INNER JOIN grade 2nd ON 2nd.grade_id = sg.grade_id 

WHERE sg.student_id = 20140540 

GROUP BY 1st.grade, 2nd.grade; 

回答

1

你想要做什麼是支點,看到MySQL pivot table了許多解決方案。

SELECT MAX(IF(g.grade_id = 1, g.grade, 0)) AS first, 
     MAX(IF(g.grade_id = 2, g.grade, 0)) AS second 
FROM grades AS g 
JOIN student_grade as sg ON sg.grade_id = g.grade_id 
WHERE sg.student_id = 20140540 

不需要ORDER BY,因爲這隻返回1行。

DEMO

+0

大聲笑。我忘了,我試圖創建數據透視表。 'MAX'方法奏效了。 :) – Francisunoxx