我在Mysql中有一个这样的表:
学生姓名 | 课程 |
---|---|
乔恩 | C1 |
大卫 | C2 |
韦恩 | C3 |
乔恩 | C3 |
我需要将结果写在这样的表格中:
学生姓名 | 课程1 | 课程2 |
---|---|---|
乔恩 | C1 | C3 |
大卫 | C2 | |
韦恩 | C3 |
如果有帮助我,我将不胜感激。 谢谢
如果您只需要一行中每个学生的所有结果,您可以使用 group_concat 例如:
SELECT studentname, group_concat(course) AS Courses
FROM my_table
GROUP BY studentname
ALTER TABLE my_table ADD COLUMN Course2 CHAR(2)
其中
my_table
是表的名称,CHAR(2)
是列的类型(您可能需要与 Course1
相同)
查看文档。
您在表格中混合了概念,当学生注册第三门课程时会发生什么?还是第四个?
如果您的表是联结表,请参阅@scaisEdge 发布的答案。
否则,如果您尝试将所有学生信息存储在一张表中,则应更改数据库结构以具有:
一个
student
表,存储学生信息,例如:
table student
id | name | email
1 | aragorn | [email protected]
2 | gandalf | [email protected]
...
另一个存储课程信息的表:
table course
id | name | ....
1 | magic1 | ....
2 | swordmanship | ....
还有一个连接表来存储哪些学生注册了哪些课程:
table student_course
student_id | course_id
1 | 1 // Gandalf is taking magic1
2 | 2 // Aragorn is taking swordmanship
1 | 2 // But Gandalf also is taking swordmanship
在此联结表中
student_id
将是 student.id
的外键,而 course_id
是 course.id
的外键。
在wikipedia中有一些关于关系模型的很好的介绍性信息。