我想使用外键水平选择一个具有不同值的列。来自另一个表名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;
答案 0 :(得分:1)
您要做的是 pivot ,有关许多解决方案,请参阅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行。